黑马程序员技术交流社区

标题: 请大伙帮忙解答一个简单的问题!!感谢!! [打印本页]

作者: 霸王睡别姬    时间: 2015-4-16 19:21
标题: 请大伙帮忙解答一个简单的问题!!感谢!!
本帖最后由 霸王睡别姬 于 2015-4-17 08:58 编辑

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

作者: sunyang    时间: 2015-4-16 21:59
楼主你好,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

作者: 麻木    时间: 2015-4-18 17:28
我觉得考这种题 纯属有病 在真正工作中 搞不清楚优先级 直接用小括号强制规定不就OK了 简单明了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2