不对.比如 int a = 3; int b = (a++) * (a++); 前面一个a是3,后面一个a是4,b = 12第一个(a++)中,先计算括号里对吧,括号里是a++,就先计算a咯,那(a++)就等于3了,此后a才自增 第二个(a++)中,同上,不过此时a已经为4了,因为前面自增过了如果是 int b = (a++) * (++a); b就为15了当然现实代码最好不要这样写,这样写会让别人看不懂 就像上式: 写的时候就要拆成 int b = a; a++; a++; b *=a; 这样别人看代码一目了然
这时候你再去打印a的话 又才变成4
和++a是反着的 不过++a就起不到这种骗人的效果了
a++ 先运算(取a++的值,然后a再自增)再*2有什么问题吗
等价于:
int b=a*2;
a++;
而
int b=(++a)*2;
等价于:
a++;
int b=a*2;
语法基础
你试试
int b = (a++);
int b = a++;有区别么?
没有吧
应该也一样吧
先计算括号里表达式的值。
括号里表达式为
a++因为++ 在后面,所以先计算a的值,在整个表达式计算完以后,a才会自增。
此时a的值为3
3*2 = 6
此时a自增为4
不对.比如 int a = 3;
int b = (a++) * (a++);
前面一个a是3,后面一个a是4,b = 12第一个(a++)中,先计算括号里对吧,括号里是a++,就先计算a咯,那(a++)就等于3了,此后a才自增
第二个(a++)中,同上,不过此时a已经为4了,因为前面自增过了如果是 int b = (a++) * (++a);
b就为15了当然现实代码最好不要这样写,这样写会让别人看不懂
就像上式:
写的时候就要拆成 int b = a;
a++;
a++;
b *=a;
这样别人看代码一目了然
这位,这里b=12是不正确的,a++是在使用a之后再自增1,因此b=9,a=5