c语言逗号运算符优先级问题:先执行++?

#include<stdio.h>int main(){ int d=0,e=0; d=9+e,e++,e+9; printf("%d,%d\n",d,e); return 0;}因为逗号运算符优先级最低;d=9+e,e++,e+9;这条语句执行时先执行e++;在执行d=9+e;那输出的值不应是10吗?求正确思路请指出错误

d=0;e=0;

这个式子
d=9+e,e++,e+9;

中,优先级最高的是++,但是,它是后自增,后自增在本句其他计算全部执行完之后才运行,所以先不会执行e++;
此时e仍然是0。

接下来,就是按照逗号表达式d=9+e,e++,e+9;的顺序执行了:①执行第一个表达式d=9+e=9+0=9,把结果9赋值给d,所以得到d是9;②第二个表达式e++,刚才分析过了,这个后自增最后执行,此时什么也不会做
;③e+9=0+9=9,这仅仅是做了一个加法,而且得数(9)都没有保留!
最后,e再自增为1。
所以,输出的结果是:d为9,e为1。
有什么问题请留言。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-30
d=(d=9+e,e++,e+9)
这样的话,用gcc编译器d就是打印10
如果单单是d=9+e,e++,e+9,赋值运算符优先级大于逗号,相当于 (d=9+e),e++,e+9,从左到右算,d=9,e=1,e+9=10,但是这隐藏了一个临时变量 比如x, x=1+9=10,但是你没有接收这个10,于是就被丢掉了,如果像我第一行那样,这个10就会被接收本回答被提问者采纳
第2个回答  2019-12-30
逗号运算不是这么看的。计算时,从左向右,分别计算每个以逗号分隔开的表达式,最后一个表达式就是这个逗号表达式的最终结果。如d=9+e,e++,e+9 等价于3个式子:
d = 9 + e;
e++;
e+9;
e的初始值是0,所以d = 9 + e = 9 + 0 = 9。e++,所以e = 0++ = 1。至于最后的e+9,是“整个”逗号表达式的值,只不过不影响d和e的最终值
第3个回答  2019-12-30
是先执行 d=9+e ,再执行 e++
相似回答