赋值运算符的关联性

赋值运算符的关联性

众所周知,赋值运算符的关联性是从右到左,但是
如果从右到左,给定代码中的输出应该为零,但输出为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 == b0
0 == 01
1被分配给a

关于c - C中赋值运算符的关联性的混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17517463/

10-16 04:54