黑马程序员技术交流社区

标题: b= (++a) + (a++) [打印本页]

作者: UT丶    时间: 2014-4-24 12:19
标题: b= (++a) + (a++)
a=5 ;  b= 0 ; 求大神解释一下内存存储过程!

作者: 大龄产妇    时间: 2014-4-24 12:38
在内存中先开辟一个整数变量空间,在空间中定义两个变量一个为a =5另一个为b =0。在做b=(++a)+(a++)这个运算时,+号在前先做自增运算后在做整体运算。也就是1.  a = a +1 ;2.  b=(新的a)+(原a); 3.  再在第新a的基础上+1
作者: 大龄产妇    时间: 2014-4-24 12:40
大龄产妇 发表于 2014-4-24 12:38
在内存中先开辟一个整数变量空间,在空间中定义两个变量一个为a =5另一个为b =0。在做b=(++a)+(a++)这个 ...

补充,在空间上就是重新定义变量后,原变量就被释放。
作者: .Drenched    时间: 2014-4-24 16:04
本帖最后由 .Drenched 于 2014-4-25 20:40 编辑

++a和a++,都是a的值加了1,但是++a是先做自加,再用自加的值去和别人相加,而a++是先用初始a去和别人相加再自加。

你这里a=5,b= (++a) + (a++),,b=12,这个不好解释,我给你看个例子,你一下就明白了。

第一种情况:
a=3;
b=a++;
运行后
b=3,a=4

第二种情况:
a=3;
b=++a;
运行后
b=4,a=4

作者: 兰闻天    时间: 2014-4-24 16:12
大龄产妇 发表于 2014-4-24 12:38
在内存中先开辟一个整数变量空间,在空间中定义两个变量一个为a =5另一个为b =0。在做b=(++a)+(a++)这个 ...

a++里的a不是++a后a的值吗??
作者: 大龄产妇    时间: 2014-4-24 17:16
兰闻天 发表于 2014-4-24 16:12
a++里的a不是++a后a的值吗??

//是的,我忽略了。这道题上机会报错,不能这么写。
#include <stdio.h>
int main()
{
    int a , b ;
    a = 5;
    b = 0;
    //b = (++a) + (a++);
    b = ++a;
    b = b +(a++);
    printf("a的值是:%d\nb的值是:%d\n",a,b);
    return 0;
}
//这样就不会错了,a的值是7, b的值是12.
作者: liulinjie    时间: 2014-4-24 18:24
本帖最后由 liulinjie 于 2014-4-24 18:26 编辑

表达式中有 前置加加 时,总是先做前置加加,所以,先做 a++,这样 a = 6,第一个括号表达式的值为6
加法运算,再按顺序来,做第二个括号的,第二个括号是后置加加,表达式的值为 6
这样 b = 6 + 6 = 12
表达式运算完了,a的后置加加才改变a的值,a = 7。所以,如果后面还有的话,比如 b = (++a) + (a++) + (a++),那么第三个括号的 a 在运算时还是 6,b = 6 + 6 + 6,之后 a 再自加两次(两个后置加加)。

如果原先的表达式反过来写: b = (a++) + (++a);  还是先算右边的前置加加,再算左边的后置加加,结果是一样的,b = 12,a = 7。

作者: 恣意    时间: 2014-4-24 20:34
++a表示先运算,再用a;
a++表示先用a,再运算。
题中,开始a=5,++a后,a=6、b=6+(a++);
      然后a++,则b=6+6=12、a=7.
作者: 251638256    时间: 2014-4-24 22:05
:D
b= (++a) + (a++)
前自增的值是即可得到的 所以++a后 变量a变6了
前自增得到的值是在自增之前的值然后再自增
所以表达式6 + 6 = 12
然后a再指向自增 a变成了7

作者: 李鹏-ios    时间: 2014-4-26 23:07
b = (++a) + (a++);
首先,执行的是++a,这个语句是先执行a+1的操作,a的值变为6;
然后,执行的是a++,这个语句先不执行a+1的操作,所以a++在执行完b = (++a) + (a++)语句前,a的值还是6;所以,b = (++a) + (a++)的运行结果是b=12;整个语句运行完成后执行a+1,所以输出a=7;




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