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

#include<stdio.h>intmain(){intd=0,e=0;d=9+e,e++,e+9;printf("%d,%d\n",d,e);return0;}因为... #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吗?求正确思路请指出错误 展开
 我来答
岔路程序缘

2019-12-30 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3375万
展开全部
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。
有什么问题请留言。
匿名用户
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就会被接收
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2019-12-30 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:393万
展开全部
逗号运算不是这么看的。计算时,从左向右,分别计算每个以逗号分隔开的表达式,最后一个表达式就是这个逗号表达式的最终结果。如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的最终值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网海1书生
科技发烧友

2019-12-30 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12310 获赞数:26224

向TA提问 私信TA
展开全部
是先执行 d=9+e ,再执行 e++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式