黑马程序员技术交流社区
标题:
大家帮忙检查一下下面的代码分析的对吗
[打印本页]
作者:
龙瑞麟
时间:
2015-3-24 21:15
标题:
大家帮忙检查一下下面的代码分析的对吗
请大家帮忙看一下这段代码我分析的对吗?不对的地方麻烦指出来一下,谢谢,因为是零基础有些地方弄得不是太明白
#include <stdio.h>
int main(int argc, const char * argv[])
{
//定义了一个变量b
int b;
//定义了一个变量a,并把5赋值给了变量a
int a = 5;
/*
1.++a 是先把a的值 +1 后再进行运算,所以 ++a = 6;而 a++ 则是先把的值拿出来运算以后再 +1,此时a的值已经变成了6,所以6+1=7;
2.而b的结果是这样得出的,1+a = 6,然后,a++要先把a原来的值(也就是5)拿出来运算以后再+1,所以b=6+5+1=12;
*/
//3.b=(6 + 5) + 1
b = (++a) + (a++);
//4.输出b, a 的值
//5.经过运算得出的结果为 b = 12, a = 7;
printf("b=%d, a=%d\n", b, a);
return 0;
}
作者:
oucding
时间:
2015-3-24 21:24
本帖最后由 oucding 于 2015-3-24 21:26 编辑
b的值等于12 分析的有点问题,先算++a,在算后面的a++的,当进行到后面的a++的时候a已经是6了,不过由于a++是先将a的值进行计算,最后a的值自动增加1 所以b=6+6=12,a=5+1+1=7
作者:
龙瑞麟
时间:
2015-3-24 21:32
b = (++a) + (a++)
请问一下:++a=6; 那后面的a此时的值是多少呢?是自动变成了6再+1吗?
作者:
龙瑞麟
时间:
2015-3-24 21:33
这个自增自减我搞的有点蒙圈:Q
作者:
龙瑞麟
时间:
2015-3-24 21:35
能不能逐条详细帮我分析一下
作者:
sekey1991
时间:
2015-3-25 09:46
本帖最后由 sekey1991 于 2015-3-25 10:00 编辑
a++ 是先调用a的值运算, 再对a自增;
++a 是先自增,再调用的a的值运算;
a = 5;
b = (++a) + (a++); // ++a = 6, a++ = 6, b = 12.计算之后a 的值为 7了
编写代码应该让其无歧义话, 写成 b = ++a; b = b + a++;
这样的写法便于别人理解, 也便于编译器去差异化
作者:
龙瑞麟
时间:
2015-3-25 22:53
谢谢,看了你的分析我终于理解了:)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2