黑马程序员技术交流社区

标题: 代码的执行过程 [打印本页]

作者: UT丶    时间: 2014-5-6 15:44
标题: 代码的执行过程
b = (++a) + (a++);    是不是先a+1 在加上b的值   b= (a+1) +(a+1)  a=(++a)+1;  我的思路对吗?

作者: 兰闻天    时间: 2014-5-6 15:59
a=5;
b = (++a) + (a++);  
先算++a,得到的是a=6,++a是先计算再赋值 所以把6给算式
b = 6+(a++);
再算a++,得到a=7,a++是先赋值再计算 所以把6给算式
b = 6+6=12
作者: m573555543    时间: 2014-5-6 17:21
b = (++a) + (a++);    是不是先a+1 在加上b的值   b= (a+1) +(a+1)  a=(++a)+1;  我的思路对吗?




++a  就是a+1
a++ 是 付完值后在加1.
作者: tripleCC    时间: 2014-5-6 22:05
本帖最后由 tripleCC 于 2014-5-6 22:28 编辑

首先,不要在一个表达式里面对同一对象有多个副作用的操作。这种表达式的结果往往是未知的,取决于编译器。不要纠结于这种表达式,现实中没人会这么写的。。。gcc编译器和VC编译器执行结果是不一样的。。。想不通的话就看看毛爷爷的矛盾论,很给力的。。。
作者: sabjiang    时间: 2014-5-6 22:35
简单一句话:
++在前,自增后计算
++在后,计算后自增
作者: 郑亚鸽    时间: 2014-5-6 23:03
分析思路:根据运算符的优先级和结合性,
             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

这道题我也做过





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