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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© UT丶 中级黑马   /  2014-4-24 12:19  /  2204 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a=5 ;  b= 0 ; 求大神解释一下内存存储过程!

11 个回复

倒序浏览
在内存中先开辟一个整数变量空间,在空间中定义两个变量一个为a =5另一个为b =0。在做b=(++a)+(a++)这个运算时,+号在前先做自增运算后在做整体运算。也就是1.  a = a +1 ;2.  b=(新的a)+(原a); 3.  再在第新a的基础上+1

点评

非常详细  发表于 2014-4-24 12:43
回复 使用道具 举报 1 0
大龄产妇 发表于 2014-4-24 12:38
在内存中先开辟一个整数变量空间,在空间中定义两个变量一个为a =5另一个为b =0。在做b=(++a)+(a++)这个 ...

补充,在空间上就是重新定义变量后,原变量就被释放。
回复 使用道具 举报
本帖最后由 .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-25 20:26

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
大龄产妇 发表于 2014-4-24 12:38
在内存中先开辟一个整数变量空间,在空间中定义两个变量一个为a =5另一个为b =0。在做b=(++a)+(a++)这个 ...

a++里的a不是++a后a的值吗??
回复 使用道具 举报
兰闻天 发表于 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: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。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
恣意 初级黑马 2014-4-24 20:34:42
8#
++a表示先运算,再用a;
a++表示先用a,再运算。
题中,开始a=5,++a后,a=6、b=6+(a++);
      然后a++,则b=6+6=12、a=7.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
:D
b= (++a) + (a++)
前自增的值是即可得到的 所以++a后 变量a变6了
前自增得到的值是在自增之前的值然后再自增
所以表达式6 + 6 = 12
然后a再指向自增 a变成了7

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
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;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马