众所周知,赋值运算符的结合性是从右到左的,但是 在给定的代码中,如果我们从右到左,输出应该为零,但输出为 1 。
main()
{
int a=3,b=2;
a=a==b==0;
printf("%d",a);
}
如果我们从右转到letf,输出如何为1?
如果我们从右到左,那么 (b==0) 应该首先被求值并给出结果 0,然后表达式 (a==0) 被求值也给出 0,最后 a 的值将为 0。
最佳答案
赋值是在 RTL 中完成的,但等式 (==
) 不是。
该声明实际上是:
a = ((a == b) == 0)
作业的右侧是从左到右计算的。按照步骤,这就是正在发生的事情:
a == b
是0
0 == 0
是1
1
被分配给a
关于C 中赋值运算符结合性的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517463/