二级c的一道并不长的题

来源:百度知道 编辑:UC知道 时间:2024/09/26 00:33:42
int fun(int x[],int n)
{
static int sum=0,i;
for(i=0;i<n;i++)
sum+=x[i];
return sum;
}
int main()
{
int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);
printf("%d",s);
}
输出的结果是60,这是为什么呢?

int fun(int x[],int n)
{
static int sum=0,i;
for(i=0;i<n;i++)
sum+=x[i];
return sum;
}
int main()
{
int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);
printf("%d",s);
}
因为fun函数中的sum定义为静态变量,这样当fun函数结束后sum变量还会存在,因为静态变量的生命周期是和全局变量相同的。
现在一步一步分析
从fun函数得知,作用是求数据的各数据和的。
当运行到s=fun(a,5)+fun(b,4);
先调用fun(a,5),这时第一次初始化sum变量,for循环过后,sum的值是15,返回。
现在调用fun(b,4);这时,sum的值已经是15了,再经过for循环后,sum的值就变成45接着返回。
最后,s = 15 +45;因此最后的结果是60

static int sum=0
这个语句会只执行一次
之后SUM就会保存现在的值 而不会重新定义

结果是45吧!