我碰到一个代码片段,其中使用了一条语句int k=(a++,++a)
。 我不明白这是哪种类型的语句(a++,++a)
以及它将如何评估。为什么在这里使用支架?这是一个函数调用吗?以下代码如何在C中评估?
这是代码。
#include <stdio.h>
int main(void) {
int a=5;
int k=(a++,++a);
printf("%d\n",k);
return 0;
}
我得到的输出是7--为什么?
我碰到一个代码片段,其中使用了一条语句int k=(a++,++a)
。 我不明白这是哪种类型的语句(a++,++a)
以及它将如何评估。为什么在这里使用支架?这是一个函数调用吗?以下代码如何在C中评估?
这是代码。
#include <stdio.h>
int main(void) {
int a=5;
int k=(a++,++a);
printf("%d\n",k);
return 0;
}
我得到的输出是7--为什么?
这不是函数调用。
这是一个使用逗号运算符的示例,该运算符从左到右评估每个表达式并返回最右边表达式的结果。这是相同的写作
a++;
k = ++a;
如果它被写
k = a++, ++a;
然后它会被解析为
(k = a++), ++a;
和评估的
k = a++;
++a;
是你是对的;这就是为什么下面的代码
int main(void) {
int y=1,x=0;
int l=(y++,x++)?y:x;
printf("%d ",l);
return 0;
}
产生1
作为输出。
(y++,x++)
的值返回x
即最右边的表达式,因此l
的值变为1
。
你确定代码是? int k =(a ++,++ a);源代码是否被编译? –
是的,和o/p来作为'7' – a874
@LeonidasMenendez我很确定这是写的正确。他使用逗号运算符。 – WhozCraig