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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© UT丶 中级黑马   /  2014-5-6 15:44  /  1945 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

b = (++a) + (a++);    是不是先a+1 在加上b的值   b= (a+1) +(a+1)  a=(++a)+1;  我的思路对吗?

5 个回复

正序浏览
分析思路:根据运算符的优先级和结合性,
             1.计算 (++a),a的值加1变成6,
             2.再计算(a++),a++表示在使用a之前a的值不变,故a的值依然是6
             3.计算b,b的值等于6+6=12,这时a++在a使用过后a变成了7
             4.最后结果a=7,b=12

这道题我也做过
回复 使用道具 举报
简单一句话:
++在前,自增后计算
++在后,计算后自增
回复 使用道具 举报
本帖最后由 tripleCC 于 2014-5-6 22:28 编辑

首先,不要在一个表达式里面对同一对象有多个副作用的操作。这种表达式的结果往往是未知的,取决于编译器。不要纠结于这种表达式,现实中没人会这么写的。。。gcc编译器和VC编译器执行结果是不一样的。。。想不通的话就看看毛爷爷的矛盾论,很给力的。。。
回复 使用道具 举报
b = (++a) + (a++);    是不是先a+1 在加上b的值   b= (a+1) +(a+1)  a=(++a)+1;  我的思路对吗?




++a  就是a+1
a++ 是 付完值后在加1.
回复 使用道具 举报
a=5;
b = (++a) + (a++);  
先算++a,得到的是a=6,++a是先计算再赋值 所以把6给算式
b = 6+(a++);
再算a++,得到a=7,a++是先赋值再计算 所以把6给算式
b = 6+6=12
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马