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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请大家帮忙看一下这段代码我分析的对吗?不对的地方麻烦指出来一下,谢谢,因为是零基础有些地方弄得不是太明白
#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;
}

6 个回复

倒序浏览
本帖最后由 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
回复 使用道具 举报
b = (++a) + (a++)
请问一下:++a=6;  那后面的a此时的值是多少呢?是自动变成了6再+1吗?
回复 使用道具 举报
这个自增自减我搞的有点蒙圈:Q
回复 使用道具 举报
能不能逐条详细帮我分析一下
回复 使用道具 举报
本帖最后由 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++;
这样的写法便于别人理解, 也便于编译器去差异化





回复 使用道具 举报
谢谢,看了你的分析我终于理解了:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马