众所周知,赋值运算符的关联性是从右到左,但是
如果从右到左,给定代码中的输出应该为零,但输出为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 - C中赋值运算符的关联性的混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17517463/