C++问题,请高手解答

来源:百度知道 编辑:UC知道 时间:2024/06/15 09:48:22
#include<iostream.h>
int f(int);
int main()
{int i;
for(i=0;i<5;i++)
cout<<f(i)<<' ';
return 0;}
int f(int i)
{static int k=1;
for(;i>0;i--)k+=i;
return k;}
结果是什么?具体的计算过程~
1==1
1+1==2
2+2+1==5
5+3+2+1==11
11+4+3+2+1==21
为什么加4,3,2,1,我以为是只有两个数相加,到后面怎么越来越多呢?

1 2 5 11 21
计算过程:
1==1
1+1==2
2+2+1==5
5+3+2+1==11
11+4+3+2+1==21
后面越加越多的原因:
当调用f(4)的时候,i==4
for(;i>0;i--) 循环执行 k+=i; 四次,
每次所加的数递减, 即为: (((11+4)+3)+2)+1

1 2 5 11 21
计算过程:
1==1
1+1==2
2+2+1==5
5+3+2+1==11
11+4+3+2+1==21
因为inf f(int i)中的 static int k=1;k是个静态变量
当int f(int i)结束后 k不会自动消失,而是在整个程序运行期间都存在,
只是在main()函数中不能显式的使用k,而k的值一直保持不变
简单的说k的生存期为整个程序运行期间,而作用域只是在int f(int i)函数中
所以每次会越加越多