#include<stdio.h> main() { int a=1,b; b=(++a)+(++a); printf("%d",b); } 结果为什么是6,而不是5呢?

我是百度新手,没多少财富……明天就要考试了……跪求答案呀,高手们……... 我是百度新手,没多少财富……明天就要考试了……跪求答案呀,高手们…… 展开
 我来答
qwe7275
2012-01-03 · TA获得超过158个赞
知道答主
回答量:138
采纳率:0%
帮助的人:119万
展开全部
看完这个你就明白了!
若单纯按照“自左至右”的运算规则,在i=3
的情况下_『:(++i)+(++i)+(++i),相当
于 =4+5+6=15; :(i++)+(i++)+(i+
+),相当于 =3+4+5=12;『=(++i)+(i+
+)+(++i),相当于J=4+4+6=14。但程序
实际执行后3个表达式的结果分别是18,9和
15。
在表达式 =(+ +i)+(++i)+(++i)
中, 的值是3个自增表达式的值,而每一个自增
表达式的值其实取决于i的值。++i是一个自
增表达式,这个表达式的计算分成2步,自增:i的
值加1;取值:取 的值作为整个自增表达式的值。
因为是前缀自增,所以这2步的顺序是先自增后
取值。而(++i)+(++i)+(++i)是一个算
术表达式,这里只有2个运算符++和+。从优
先级来说++高于+,当然应该先计算3次++,
i的值变成6;再做+。即:『=6+6+6=1 8。
百度网友51326dd
2012-01-03 · TA获得超过112个赞
知道答主
回答量:50
采纳率:0%
帮助的人:40.9万
展开全部
有点意识:我看了 下编译顺序是 这样的
它先编译第一个()内表达式,再编译第二个()内表达式,再接着编译算第一个()值,第二个()值,再接着算+的值,最后赋给b;即它先算每个括号内的表达式,再算括号的值,最后算括号外的表达式,所以上面在算第一个括号值是a已经变为3,即有b=3+3=6;
这个考试应该不会出的,放心考好了
b=(++a)+(++a)+(++a) 应该是b=4+4+4=12
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5349592
2012-01-03 · TA获得超过143个赞
知道小有建树答主
回答量:531
采纳率:0%
帮助的人:280万
展开全部
确实有点奇怪,一个时b=2,两个时b=6,但是第二个换成a++,b=4又是对的,再加就在这基础上加,也是对的,就两个时的问题。f28507861的解释有点牵强,有三个时b=10,而非4+4+4=12
追问
三个为什么是10呢?能一步步解析清楚吗?我可以提高财富值的
追答
两个的时候b=6,a=3,三个的时候就是先++a,所以b=6+4=10。VC++和C-FREE下得到相同结果,两个时a=3,b=6,三个时a=4,b=10
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jjczl
2012-01-03 · TA获得超过227个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:316万
展开全部
这种问题最好去看生成的汇编代码,看两次++和+的执行顺序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
f28507861
2012-01-03
知道答主
回答量:19
采纳率:0%
帮助的人:14.7万
展开全部
()括号的运算等级比+号高,有点像我们做数学题那样,先算()里面的++a,两个括号算好后刚好a的值为3,b=3+3=6 拜托,45xhx 的回答我够无语的!! ++a的意思是a在用之前先+1,然后再使用,原先a=1,第一个括号(++a)算完后a的值为2,然后第二个括号(++a)算完后a的值是3!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-01-03
展开全部
2+4
b=(++a)+(++a)+(++a);
2+4+6
忘记这些烂题吧。没有人会这么写程序的。(除了某些自以为是的高手)
写这种代码代码移植和可读性都很差!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式