static int i=0是静态变量,也就是说在程序整个生命周期里都是稳定存在的。因此每调用一次f(),由于i++而增加1;s是局部变量,每次调用都重新分配而初始化为0
因此f()返回是1,2,3,4,5……,每次调用都加1
了解这点,问题就好解决了。
我就不用专业术语来回答了(因为我不太懂)static int i=0 如果出现在函数的内部的话,i就是是变的(每次用都是i上一次的值),如果以 static int i=0 f(){ }这种形式出现的话就是不可变的(每次用都是0)。这道题中 static int i=0在函数内部,而函数最后有i++,所以i每次循环i都加1,而s每次都是1(前面没有 static)比如当i=2时s=1+2=3。
第1次:s=1 ;i=0;return 1;
第2次:s=2;i=2;return 2;
第3次:s=4 ;i=3;return 4;
第4次:s=7 ;i=4;return 7;
第5次:s=11 ;i=5;return 11;
a=1+2+4+7+11=25
楼上错,i为static
函数f中变量i为静态变量,函数f调用结束后变量i所占据的存储单元不会释放,而在主函数中f被调用5次,具体过程如下: 第1次调s=s+i=1+0=1,i=i+1=1,主函数中a=a+f()=0+1=1 第2次调用f:s=s+i=1+1=2,i=i+1=2,主函数中a=a+f()=1+2=3 第3次调用f:s=s+i=1+2=3,i=i+1=3,主函数中a=a+f()=3+3=6 第4次调用f:s=s+i=1+3=4,i=i+1=4,主函数中a=a+f()=6+4=10 第5次调用f:s=s+i=1+4=5,i=i+4=5,主函数中a=a+f()=10+5=15 所以printf语句的输出结果为15。
主函数5次调用函数f(),下面列出每次调用前后的变量s,i,a的值。
1次: s = 1,i = 1,a = 1
2次: s = 2,i = 2,a = 3
3次: s = 3,i = 3,a = 6
4次: s = 4,i = 4,a = 10
5次: s = 5,i = 5,a = 15
故最后的打印结果是: 15