C 中赋值运算符结合性的混淆

标签 c

众所周知,赋值运算符的结合性是从右到左的,但是 在给定的代码中,如果我们从右到左,输出应该为零,但输出为 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)

作业的右侧是从左到右计算的。按照步骤,这就是正在发生的事情:

  1. a == b0
  2. 0 == 01
  3. 1 被分配给 a

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

相关文章:

c - 大数组不会导致堆栈溢出

c - 链表段错误

c - msgget 无法加入 mq

arrays - 用方括号解释函数指针参数

c - 如何使指针在新结构中兼容?

c - Windows gcc 上 srand() 输出的差异与 C 编程的预期输出?

计算 C 中 float 的 epsilon

c - 如何确定结构数组的大小并分配内存 C 编程

c++ - 常量表达式中的条件运算符

c - C 中的函数已定义错误