
#include <stdio.h> main() { int a,b; a=1,b=(++a)+(++a); printf("%d,%d\n",a,b); }
1个回答
展开全部
这涉及到c语言符号的运算优先级问题。。++a表示先+1,后返回值。所以,这句话的执行顺序相当于:
a=a+1;
a=a+1;
b=a+a;
这样b就是6了。
如果是两个a++的话,就是:
b=a+a;
a=a+1;
a=a+1;
这样b就是2
a=a+1;
a=a+1;
b=a+a;
这样b就是6了。
如果是两个a++的话,就是:
b=a+a;
a=a+1;
a=a+1;
这样b就是2
追问
a=1,b=(++a)+(++a)
所以有,第一个++a=2,第二个++a=3
然后b=2+3不就是5了。。。。。请指点我哪点错了。。
追答
原理就是,如果只有第一个++a是等于2的,但后面还有一个++a,那就都变成3了,都加完了之后,再一起返回值进行下一等级的运算。
再具体点,就是,这个加法运算,是要等加号两边的运算都做好了才进行的。就像个栈一样,遇到+号才会把之前存的两个数值弹出来。。我越说越乱了,囧rz
你再体会下吧,(++a)+(++a)就是,a+1;a+1;a+a;这是6。如果是(++a)+(++a)+(++a),那当两个++a做完后,第一个加法就可以做了,然后再去做第二个,这个结果就是3+3+4,等于10。(++a)+(++a)+(++a)+(++a)的话,就是3+3+4+5=15。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询