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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨勇 中级黑马   /  2014-4-19 20:02  /  1601 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨勇 于 2014-4-20 10:53 编辑

#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}

评分

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

查看全部评分

7 个回复

倒序浏览
a++是先执行语句在+1,++a是先+1在执行语句 所以 (a++)+(++a) a++为2进行运算 但此时a已经变为3 ++a时 又变成4执行运算 所以结果b为6

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
你只要记住a++是想让a参加运算,运算后加一,而++a是先进行加一然后再运算,因为a=1。执行++a后这是a是二, 执行b=(a++)+(++a),执行前a++为2,然后a变为3,在执行++a这是a变为4,最后为b=6,a=4

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
a++    和     ++a     的区别

一般来说他们的区别在于混合表达式中运算符的处理顺序。
a++是先处理其他运算,然后a再自加;
而++a则是先处理a自加运算,再处理其他表达式运算;
如果只是单纯的表达式a++;或者是++a;这两个表达式的结果就没什么区别。
譬如是
#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}
计算的结果是a=4,b=6
++a是表达式先处理自加运算后处理赋值运算;
a++是表达式先处理赋值运算后处理自加运算;

评分

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

查看全部评分

回复 使用道具 举报
a++,变量 a先被引用,引用完后自加1,(a++)表达式的值是2,但引用完成后变量a的值变为3。
++a , 变量 a先自加1,然后被引用,(++a)的值是4,a的值也变成4。b的值是6,a的值是4。

关键在于搞明白++a是先自加后引用,a++是先引用后自加。
回复 使用道具 举报
++在前的话a要先加在参与到运算里面
++在后的话用a原来的值参与运算后a在自加
回复 使用道具 举报

#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}
a++,++在后面的是碰到;号才加1,但是加了括号,就先运算,不碰到;也可以先加。所以,(a++) 后结果是3,之后++a是先执行加一操作,就变成了4.

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 星河鹭起 于 2014-4-20 11:57 编辑

#include<stdio.h>
int main()
{
   int a=1;
   int b;
   b=++a;//此时b=2,a=2
   b=(a++)+(++a);//此时b=4,第一个a的值为2,为什么第二个a的值为什么是4?
   printf("b=%d,a=%d\n",b,a);
   return 0;
}

自增运算++优先级高于+,且从左往右开始运算。
因此首先a运行完后,因为这里a有个括号,就导致直接加1,变成了3,此时在运行++a,所以此时a就变成了4。
a++
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马