#include <stdio.h> main() { int a,b; a=1,b=(++a)+(++a); printf("%d,%d\n",a,b); }

输出的答案问什么是3,6??那个不应该是3,5么?求解!!... 输出的答案问什么是3,6??那个不应该是3,5么?求解!! 展开
 我来答
冲出马家庄
2012-08-19 · TA获得超过914个赞
知道小有建树答主
回答量:361
采纳率:100%
帮助的人:429万
展开全部
这涉及到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=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。。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式