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

发布于 2022-09-13 00:40:15 字数 239 浏览 28 评论 0

代码如下

#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
()运算符不是自左向右运算吗?为什么是这种结果?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回眸一遍 2022-09-20 00:40:15

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

江挽川 2022-09-20 00:40:15

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

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

结果不是2,5,6吗

疑心病 2022-09-20 00:40:15

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

       3          5            2
c = (a = 3) + (b = a + 2) - (a = 2);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文