关于C语言中运算符的问题

新手上路,请多包涵

代码如下

#include <stdio.h>

int main()
{
    int a = 5;
    int b, c;

    c = (a = 3) + (b = a + 2) - (a = 2);

    printf("%d %d %d", a, b, c);

    return 0;
}

结果是 2 5 5
()运算符不是自左向右运算吗?为什么是这种结果?

阅读 2k
3 个回答

表达式求值的顺序是未定义行为(undefined behavior),研究这个没有意义。最终程序产生任何结果都是正常的,具体行为由编译器和平台决定

真的不是2,5,6吗???

赋值语句求值就是被赋值变量的求值。第一个括号求值为3(a变成3),第二个求值为5(b变成5),第三个求值为2(a又变成2)。c变成6

结果不是2,5,6吗

不同的编译器结果可能不一样,vc6结果就是 2 5 6

       3          5            2
c = (a = 3) + (b = a + 2) - (a = 2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进