C语言 int i = 3, k = (++i) + (++i) + (i++);求大神解释为什么k = 15啊?
4个回答
展开全部
楼主这个有意思,按理来说应该是k=14,i=6,那为什么呢,我们将你这个代码分解开
k=(++i);k=k+(++i);k=k+(i++),发现结果是k=14的,再来
k=(++i)+(++i);k=k+(i++);这是会发现在执行完第一行代码即就是k=(++i)+(++i)后k=10,也就是说多出来的一个1在这儿,问什么呢
打开对应的汇编语言会发现这个
系统将加号左面的i第一次自加后i=4
接着又将加号右面的i入栈自加此时i=5
然后将此时得到的结果入栈进行加法此时i=5(注意)
接着又将被加数入栈相加此时还是i=5
加完后k等于10,i=5
我的表达可能不是很清楚希望你能理解。
如果楼主是希望得到14这个结果的这样的自加操作还是分开写,用分号隔开的好,应为你不知道
系统是怎么运算的,当然如果你明白系统的处理方式,并希望得到这个结果这样也是可以的
只是不便于程序被别人理解,所以最好还是别这么写程序。
望采纳。
展开全部
首先:我们看下以下表达式的运算过程:
k=(++i) + (++i) + (i++);
过程:
1、运算从左到右
2、先计算括号内
因此计算过程如下:
1、先计算左边:++i ==> ++3==> i=4;
k=4+(++i)+(i++);
2、再计算中间++i ==>++4==> i=5;
k=4+5+(i++);
3、再后计算:i++==>++5==> i=6;
4、最后求和
k=4+5+6==>k=15
因此,k=15、i=6
希望能帮助到你,你的好评是我前进的动力!谢谢!
k=(++i) + (++i) + (i++);
过程:
1、运算从左到右
2、先计算括号内
因此计算过程如下:
1、先计算左边:++i ==> ++3==> i=4;
k=4+(++i)+(i++);
2、再计算中间++i ==>++4==> i=5;
k=4+5+(i++);
3、再后计算:i++==>++5==> i=6;
4、最后求和
k=4+5+6==>k=15
因此,k=15、i=6
希望能帮助到你,你的好评是我前进的动力!谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为++i中的++优先级高,先算2个前置的++,i就=5了
3个5相加就=15
3个5相加就=15
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
++在前先自增,k=4+4+5=15。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询