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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飞翔的猪 中级黑马   /  2015-5-9 15:16  /  4152 人查看  /  51 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看了李明杰老师的视频,做了做实验,发现一个问题求大神指导。
int a=10;

int b=(++a)+(a++);
运行结果是b=23。。。我想知道怎么回事

51 个回复

正序浏览
明显22,而且,你的括号也是不需要的
回复 使用道具 举报
编译器肯定没问题,*(++a)和(a++)优先级都是一样的.
C不能保证(++a)和(a++)哪个先运算,最好的办法就是避免这种写法.
因为大多数编译器在某些细节方面是不一样的,这样写的话在移植到别的机器上就容易出现问题,需要调试.
回复 使用道具 举报
看来是编译器的问题没错了,我也用的Dev c++,我擦,赶紧换掉
回复 使用道具 举报
杰杰 中级黑马 2015-10-23 11:30:09
49#
本帖最后由 杰杰 于 2015-10-23 11:32 编辑

int a = 10;
(a++)+(++a)

a++的值应该是10吧,然后a=11
a = 11的时候做++a
++a的值应该是12  这时a也应该等于12.
然后10+12等于22.
我来解释一下我怎么想的,在a++中a++的值等于a 的初始值,a一开始是等于10的,所以a++这个式子的值就等于10, 然后a的值经过++之后应该是等于11的,a的值和a++的值是不能混为一谈的。后面我就不说了
回复 使用道具 举报
不要纠结了,看看博客吧!http://bbs.csdn.net/topics/370153775
回复 使用道具 举报
不是22吗?你确定是23吗?
回复 使用道具 举报
++a后的a的结果是11,a++是在11的基础上加1,也就是12。11+12=23
回复 使用道具 举报
五楼正解
回复 使用道具 举报
真笨呀 ,这都不会
回复 使用道具 举报
好像视频将的还是挺详细的
回复 使用道具 举报
必须是22 ,吓一跳。。
回复 使用道具 举报
你应该看看,++n 还n++ 区别

aq.png (145.24 KB, 下载次数: 34)

aq.png

ba.png (36.76 KB, 下载次数: 32)

ba.png
回复 使用道具 举报
649678291 发表于 2015-5-10 10:28
应该是编译器问题

对 ,是编译器的问题,windows下的devc++
回复 使用道具 举报
xiongmaoren518 发表于 2015-5-10 13:55
我也觉得应该是22呀,求大神指导

编译器的问题,我证实了。。再也不用windows下的编译器了
回复 使用道具 举报
星空眼泪 发表于 2015-5-10 12:08
你错了吧,运行的结果明显是22,怎么可能是23呢?首先++a时先自增后运算,所以运算的时候应该是11,a++是先 ...

因为我用的devc++ windows下的编译器,。。。。
回复 使用道具 举报
用断点  走一遍就知道了
回复 使用道具 举报
T-fra 中级黑马 2015-5-10 22:47:20
36#
说22的没看懂视频 的
回复 使用道具 举报
先算括号里的啊!()优先级高!也就是 11+12=23
回复 使用道具 举报
++a是a的值加1而且加1之后的这个值参与表达式计算中 a++是也是a的值加1,大师a的值加1后不参与表达式的计算中。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马