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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡铭 中级黑马   /  2014-4-27 11:45  /  1594 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡铭 于 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;
}


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

评分

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

查看全部评分

5 个回复

倒序浏览
本帖最后由 执着的土豆 于 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: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
回复 使用道具 举报
(++a) + (a++);
++a 是,比如,a=5,看到++a可以直接看成a=6
a++是,a=5但是碰到;号再+1,也就是;号之后,a=6
回复 使用道具 举报
戴文婷 发表于 2014-4-27 13:41
(++a) + (a++);
++a 是,比如,a=5,看到++a可以直接看成a=6
a++是,a=5但是碰到;号再+1,也就是;号之后,a=6 ...

对,可以那样理解。
回复 使用道具 举报
++a 和 a++的区别就是,前者是先自加1,后代入计算。后者是先执行计算,之后再自加1。
你这个题目a进行过两次自加之后 ,a的值变成7基本上不用考虑了。
重点是看b。
(++a)是先令a进行自加,即5+1=6,再将6带入式中。同时(a++)时,a值已经为6,是将a值6先带入算式中计算,计算完毕后再进行加。所以在这题里无论是(a++)还是(++a)都是6
相加得 b = 12
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马