如下源代码,请问计算结果是多少?#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.
以上个人(新手)看法,欢迎指正!
(什么是最小表达式请参考图片,画的丑将就看
)