首页 > a++和++a在括号里的问题

a++和++a在括号里的问题

程序段1
int x,a=7;
x=(a++)+3;
printf("%d",x);
程序段2
int x,a=7;
x=(++a)+3;
printf("%d",x);
结果一个是x=10一个是x=11
为什么a++在括号里之后不自增了?


a++是先用a的值,然后a再+1,++a是a先+1,然后再用a的值(这时a已经+1了)。所以第一个答案是10,第二个是11。
a++在括号里并不是不自增了。你可以打印a的值看看,两题的a都是8


a++:先引用后增加,先在a所在的表达式中使用a的当前值,后让a加1

++a:先增加后引用,让a先加1,然后在a所在的表达式中使用a的新值


前缀运算后,表达式的值为原变量值加1;后缀运算后,表达式的值仍为原变量值;而变量值不论前缀运算还是后缀运算都加1。即前缀运算是“先变后用”,而后缀运算是“先用后变”。


针对程序1:x = (a++)+3 这句话可以这样翻译 x = a+3; a++;这样两句。此时x = 10 ,a=8;
针对程序2:x = (++a)+3 这句话可以这样翻译 ++a; x = a+3;这样两句。此时a =8, x =11;
你可以printf("%d",a);进行验证。
这个问题涉及到 ++a与a++之间的区别,前者是先将自己加1然后进行其它运算,后者是先进行其它运算再自己+1。也就是翻译过来的语句解释的那样。

【热门文章】
【热门文章】