黑马程序员技术交流社区

标题: 关于++a和a++的区别? [打印本页]

作者: 胡铭    时间: 2014-4-27 11:45
标题: 关于++a和a++的区别?
本帖最后由 胡铭 于 2014-4-27 16:41 编辑

#include
int main(int argc, const char * argv[])
{
    int b;
    int a = 5;
    b = (++a) + (a++);
   
    printf("b=%d, a=%d\n", b, a);
    return 0;
}


打印结果是什么?思路是什么?

作者: 执着的土豆    时间: 2014-4-27 11:50
本帖最后由 执着的土豆 于 2014-4-27 11:54 编辑

  b = (++a) + (a++);中,++a 是先自加后使用,因此前面括号中执行过后,括号中得值是6,a得值变为6。后面括号中,a先使用后自加,因此执行后面括号,里面值是6,执行过后,a变为7,因此这句代码执行过后,也就是b=(++5)+(6++); 既b=(6)+(6); a=5+1+1.  因此执行结果是b=12,a=7
作者: gmadong@163.com    时间: 2014-4-27 11:55
本帖最后由 gmadong@163.com 于 2014-4-27 11:57 编辑

int main(int argc, const char * argv[])
{
int b;
int a = 5;
b = (++a) + (a++);

printf("b=%d, a=%d\n", b, a);
return 0;
}
         b=12, a=7
分析:(++a)是前加 就是先自加再用
          (a++)是后加 就是先用再自加

  b = (++a) + (a++);可能分解为
  b = (a=(a+1)) + a;//a=6 b=12
  a=a+1 ;//a +1 = 7

作者: 戴文婷    时间: 2014-4-27 13:41
(++a) + (a++);
++a 是,比如,a=5,看到++a可以直接看成a=6
a++是,a=5但是碰到;号再+1,也就是;号之后,a=6
作者: 执着的土豆    时间: 2014-4-27 13:48
戴文婷 发表于 2014-4-27 13:41
(++a) + (a++);
++a 是,比如,a=5,看到++a可以直接看成a=6
a++是,a=5但是碰到;号再+1,也就是;号之后,a=6 ...

对,可以那样理解。
作者: 桑托尔    时间: 2014-4-27 16:48
++a 和 a++的区别就是,前者是先自加1,后代入计算。后者是先执行计算,之后再自加1。
你这个题目a进行过两次自加之后 ,a的值变成7基本上不用考虑了。
重点是看b。
(++a)是先令a进行自加,即5+1=6,再将6带入式中。同时(a++)时,a值已经为6,是将a值6先带入算式中计算,计算完毕后再进行加。所以在这题里无论是(a++)还是(++a)都是6
相加得 b = 12




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