A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 霸王睡别姬 于 2015-4-17 08:58 编辑

在c语言中,简单的自加和自减的时候我还是比较清楚的。
但是我还是没搞懂这个原理:
a=10;
b=++a+a++;
c=a+++a;
d=a+a++;
e=a+b+c;
他们在内存中是怎样存储和参与运算的呢??

2 个回复

倒序浏览
楼主你好,c语言在编译的时候使用贪吃法,(及一次读取尽量多的有意义字符)由于Mac 下使用的g++编译器在编译时由右向左读取数据,a+++a 被理解为
a+(++a)
,同理 ++a+a++ 被理解为
(++a)+(a++)
a+a++被理解为 a+(a++)
这样本题可以这样理解
b=(++a)+(a++)
计算以后
b=22,a=12
---------------
c=a+++a=a+(++a)

计算以后
c=25 a=13
d=a+(a++)
计算以后
d=26 a=14
e=a+b+c = 61
在VC环境下编译会有很大不同,因为VC从左向右编译
PS: 这种问题只有二级考试中才会有,如果你敢在工作中写出来这种代码你会被同事打死的。

——————————————————————————————————————————
如果我解决了你的问题,请按照这个帖子把问题改成已解决,这样你我都能得到技术分,谢谢
http://bbs.itheima.com/thread-85079-1-1.html
回复 使用道具 举报
我觉得考这种题 纯属有病 在真正工作中 搞不清楚优先级 直接用小括号强制规定不就OK了 简单明了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马