鱼C论坛

 找回密码
 立即注册

关于多个++i运算规则的问题

已有 643 次阅读2014-7-14 15:11 |个人分类:C语言

如下源代码,请问计算结果是多少?
#include <stdio.h>
int main(){
        int s,i = 11;
        s =(++i) + (++i);
        printf("%d,%d\n",s,i);
}
①如果s = (++i) + (++i); 测试结果,s = 26,i = 13;
②如果s = (++i) + (++i) + (++i); 测试结果,s = 40,i = 14;
③如果s = (++i) + (++i) + (++i) + (++i); 测试结果,s = 55,i = 15;
④如果s = (++i) + (++i) + (++i) + (++i) + (++i); 测试结果,s = 71,i = 16;
……
上述结果是经过了怎样的计算过程?
首先,++i是指变量i先自增1之后才参与运算的;其次,需要理解“自增1之后”中“之后”是指什么时间,此编译器中的“之后”是指(i自增1后)在最小表达式的位置参与运算。
下面就结合上面的例子来解释一下:
第①种情况,是两个++i的表达式相加,i初始值是11,第一个++i自增之后i变成了12,但要注意编译器是要在最小表达式的位置才参与运算,在这里,最小表达式是一个加法,即表达式1加上表达式2(这里的表达式1、2均是++i而已),因此,要在第二个++i之后,i的值才参与运算,很明显,第二++i之后,i的值变成了13,所以,最终结果应该是s = 13 + 13 = 26;
第②种情况,同理,s = (++i) + (++i) + (++i);可以看做是前两个++i运算后,再与第三个++i组成最小表达式,前2个++i的和是26(此时i=12),第三个++i,自增之后,i=14,与前面2个++i的和再相加,结果就是40;
第③种情况,同理,最后一个++i自增后,i的值是15,其s = 26 + 14 + 15 = 55;
第④种情况,同理,最后一个++i自增后,i的值是16,其s = 26 + 14 + 15 + 16 = 71;
……
注意:如果p = (i++) + (i++) + (i++); 那么,结果s=15. i++表示变量i在参与完整个运算之后才能自增,以此题为例,先是前2个i++求和,即5+5=10,由于后面还有一个i++,所以前2个i还不能自增,因此,p=5+5+5=15,整个运算完成后,第一个i自增1,i=6,第二个i再自增变成7,最后第三个i才自增,结果i=8.
以上个人(新手)看法,欢迎指正! 
(什么是最小表达式请参考图片,画的丑将就看


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-23 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部