int main(void)
{
int a=0, b=20;
char x=1, y=10;
if(a,b,x,y)
printf("bye");
return 0;
}
上面的代码中,“if”条件语句是如何工作的? “if”语句只会考虑“y”的值吗?
int main(void)
{
int a=0, b=20;
char x=1, y=10;
if(a,b,x,y)
printf("bye");
return 0;
}
是的,逗号运算符的值是右操作数。因为其他操作数都没有副作用,所以可以简化为 if (y)
。
&&
或||
与(
和)
一起使用。 - haneefmubarak来自维基百科:
在C和C++编程语言中,逗号运算符(由标记,表示)是一个二元运算符,它评估其第一个操作数并丢弃结果,然后评估第二个操作数并返回此值(和类型)。
这实际上意味着只有最终操作数被评估为真实性,之前的操作数的结果将被丢弃。
在 if(a,b,x,y)
中,只考虑了 y
的真实性,因此无论 y
评估为什么,都会被认为是真/假。
在您的情况下,y
等于10,在C中被认为是 true
,因此 if
检查也将评估为 true
,并且将进入 if
块。
您可能想考虑 StackOverflow 上这个非常流行的问题,以了解它的用途(和误用)。
,
`)用于分隔表达式。如果多个值被括在圆括号中,则圆括号中的最后一个值被赋给变量。e.g a=(x,y,z);
then a=z;
while if,
a=x,y,z;
然后上面的表达式将被评估为(a=x);
请参考这里。
int (a=x),y,z;
,这使得答案是错误的。对于R.S.:逗号只是表达式中的运算符。(x,y,z)
是一个初始化表达式,所以逗号在那里是一个运算符。但声明不是表达式,所以int (a=x),y,z;
是无意义的,你的答案应该重新措辞。 - Jim Balter正如Joey上面所说,这只是评估为无。
if (y)
....
需要注意的是,如果您的代码已经读取:
int main(void)
{
int a=0, b=20;
char x=1, y=10;
if(a++,b++,x++,y)
printf("%d, %d, %d, %d\n", a, b, (int)c, (int)y);
return 0;
}
输出结果应该是这样的
1, 21, 2, 10
所有的增量都将被执行,但是为了评估条件而不执行。
(a++,b++,x++,y)
唯一重要的是最后一个,即y