鱼C论坛

 找回密码
 立即注册
查看: 4352|回复: 3

晚上小甲鱼老师的视频看到自增自减这节了,被困住了

[复制链接]
发表于 2013-5-5 01:19:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是这样的
int i=5,p,q;
p=(i++)+(i++)+(i++);
q=(++i)+(++i)+(++i);
输出后的结果是p=15,q=31;
q=31这条我始终算不明白,到底应该怎么加啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-5 13:07:46 | 显示全部楼层
看下这篇文章
http://wenku.baidu.com/view/36dd139a51e79b89680226ab.html
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-5 15:35:29 | 显示全部楼层
经过第一轮p=(i++)+(i++)+(i++);
这时候 i=8;(i=5 同时经过三次自加运算)
至于q = 31的结果根据VC++6.0的优化结果如下:
q=((++i)+(++i))+(++i);
先计算前面两个括号里 i 先自加两次再求和(此时 i=10, q=10+10+(++i);)
然后楼主应该就明白了吧? p= 10+10+11=31;

这样的结果完全是编译器自身决定的。楼主如果想深究可以找一些相关的参考文献来看看。

另外,这个是VC++6.0的结果 TurboC的我没试过,楼主有时间可以去试试看,不同编译器的优化结果是不太一样的。但是楼主放心,也不要太钻牛角尖,这类问题应当在自己编程的时候尽量避免吧,以免发生歧义或者影响程序的可移植性。

本人也新手,正在学习中,哪里说得不好请各位见谅
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-5 22:30:18 | 显示全部楼层
q=31  你用vc++编译器它是这样算的   ( (++i)+(++i) )+(++i)  先算前两个++i    7+7+8=22;  如果
q=(++i) +   (++i) +  (++i)  + (++i);   这样你输出的结果是31  ;7+7+8+9=31 ;   我想这样比较一下 你应该明白是怎么回事了吧  嘻嘻
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-29 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表