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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cjfire 中级黑马   /  2014-8-11 10:10  /  3683 人查看  /  33 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在视频中,讲到自增自减的时候,b = ++a,系统做了两步,一个是 a = a + 1;b = a;而b = a++,则是b = a; a = a + 1;
紧接着,视频又给出了一个例子,b = (a++) + (++a),请问这里有了小括号,编译器会怎样处理,都做了哪些工作?

33 个回复

正序浏览

受教啦.......
回复 使用道具 举报
学这个的时候,一会明白一会不明白,弄得有点晕
回复 使用道具 举报
b = (a++)+(++a),编译器会首先执行括号中的,然后在计算左边这个+,然后在计算=
回复 使用道具 举报
这个问题也在困扰着我
回复 使用道具 举报
这个应该和编译器有关系吧,以前试过貌似编译器不同结果也会不同
回复 使用道具 举报
Jr_711 发表于 2014-8-12 19:36
呵呵  惭愧,原来把a++和++a搞反了 , 现在改过来了

在没翻页之前我还一直纠结推荐答案和说你的答案搞混了,原来你已经重新编辑了。。
回复 使用道具 举报
山涧小草 发表于 2014-8-12 01:09
解释得很详细易懂!!

呵呵  惭愧,原来把a++和++a搞反了 , 现在改过来了
回复 使用道具 举报
从今以后 发表于 2014-8-12 14:05
我觉得层主把a++和++a搞反了,b=(a++)+(++a),第一个括号内是(a=10),这时还没有执行a+1,到第二个括号 ...

确实搞反了,恍惚了,还是用的不够多,没感觉到是,这次又加深次印象,实在在太感谢了!
回复 使用道具 举报

我觉得层主把a++和++a搞反了,b=(a++)+(++a),第一个括号内是(a=10),这时还没有执行a+1,到第二个括号时a=11,(++a)->a=12,最后结果是b=10+12=22;
感觉层主说的情况是b=(++a)+(a++)这种,并且按照14楼的说法,b=(a++)+(++a)用Xcode算出来应该是b=8,而不是9,第一个括号a=3,第二个括号a=4+1=5,这样看来b=(++a)+(a++),也是b=8,刚好吻合
回复 使用道具 举报 1 0

解释得很详细易懂!!:handshake
回复 使用道具 举报
fantacyleo 发表于 2014-8-11 13:09
那也没什么,直截了当告诉面试老师实际情况就是这样。

可以加你为好友不?有事想请教你一下。
回复 使用道具 举报
本帖最后由 Jr_711 于 2014-8-12 19:32 编辑

b=(a++)+(++a)


1>首先,内存只会一步一步运算,每进行一步,内存内的值都可能改变
2>然后,要把a++和++a各当做一个整体来看,
        并理解a++是先使用后加一(影响下次使用),
              ++a是先加一再使用(影响本次使用),
3>计算右边式子,并根据运算符优先级,由左向右计算
4>先算第一个括号,假设初始值a=10,则第一个括号内结果就是a的原值a=10
此时内存中a因为使用a++,使得a的值在使用之后发生改变,a=10+1=11,即此时打印a的话,a=11
5>再算第二个括号,已知现在a=11,这里调用++a,先加一后使用,即括号内结果是a=11+1=12
此时内存中a因为使用++a,a的值再加1,a=12,再使用,即此时打印a的话,a=12
6>赋值给左边:(假设a=10)
   b=(a++)+(++a)=10+12=22



以上是我个人的理解,哪里不对还望指正。

点评

http://bbs.itheima.com/thread-128465-1-1.html  发表于 2014-8-11 22:41
回复 使用道具 举报
ccq 中级黑马 2014-8-11 16:35:33
15#
其实也不难理解,看编译器顺序了,从左到右就先进行a++,然后再进行++a了,如果是从右向左,就是先执行++a,再执行a++。
回复 使用道具 举报
b=(a++)+(++a):如果a=3。第一步:(a++):括号内是一个整体,先算出来,a==4;第二步:(++a):括号内是一个整体,先算出来,a==5;第三步: b=()+ ():b=4+5;则 b==9;
回复 使用道具 举报
这个比较难,要好好思考
回复 使用道具 举报
cjfire 发表于 2014-8-11 13:06
就是说,答案是多少,取决于编译器。就怕面试的时候,出现这样的题目

确实是根据编译器来,我记得有次参加一个竞赛,一道逻辑运算的题目,TC和VC6.0编译结果都不一样,写答案的时候都得注明是用的哪种编译器
回复 使用道具 举报
cjfire 发表于 2014-8-11 13:06
就是说,答案是多少,取决于编译器。就怕面试的时候,出现这样的题目

那也没什么,直截了当告诉面试老师实际情况就是这样。
回复 使用道具 举报
fantacyleo 发表于 2014-8-11 12:43
看看某位同学的测试结果:http://bbs.itheima.com/thread-129127-1-1.html 三种C编译器,三个不同的结果, ...

就是说,答案是多少,取决于编译器。就怕面试的时候,出现这样的题目
回复 使用道具 举报
本帖最后由 fantacyleo 于 2014-8-11 12:46 编辑

看看某位同学的测试结果:http://bbs.itheima.com/thread-129127-1-1.html 三种C编译器,三个不同的结果,很震撼
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马