【有关静态变量赋值问题求解】
首先,本人在上课过程中接触到了一道题,如下:#include "stdio.h"
int f(int n)
{
static int k,s;
n--;
for(k=n;k>0;k--)
{
s+=k;
}
return s;
}
void main()
{
int k;
k=f(2);
printf("%d,%d",k,f(k));
}
执行过代码后得出的结果是:“1,1”,询问过老师得知,static静态变量在定义并赋值后下面就不能再次赋值了,同时,如果在定义静态变量时未赋值,那么此变量默认被赋值为0。
那么,问题来了,为什么打印的第二个数字是1,而不是0呢?
我的疑惑点:通过执行k=f(2)时,向调用函数f传进了一个"2"进行计算并通过返回值s传出结果赋值给k。我们可以看到s在调用函数中被定义为静态变量,既然定义时未赋值,那么s不就默认被赋值为0了吗?这算不算赋了初值,既然赋了初值,为什么在把k=1传入f()运算时因为不符合for()条件而跳过后会再次返回一个1呢?此时此刻s不是0吗?
当然,我明白静态变量虽然不能被二次赋值,但是静态变量是可以进行运算的,但在第一次传值运算时,返回值s=1,第二次返回值s为什么仍然等于1呢?1不是s的计算值吗?如果s一直等于1,这不就算是把1赋值给s了吗?
问题可能赘述,望解答。