fun(int a)
{ int b=0;static int c=3;
b++;
c++;
return(a+b+c);}
main()
{ int i,a=5;
for(i=0;i<3;i++)
printf(" %d %d ",i,fun(a));
printf("\n"); }
这个题目里面那个static变量c的值是怎么变化的呢?
不是说静态局部变量的值在下次进入该函数时储存单元的值是不变的么?
给的答案里面
第一次调用c初值为3,结束时值为4
第二次调用c初值为4,结束时值为5
第三次调用c初值为5,结束时值为6
怎么会这样子呢?
c的值不是应该始终是3么?每次调用函数的时候c变量不是被赋值为3吗?
那么全局变量呢?
它不是只能是静态变量么?
全局变量为什么又可以在初始化以后再次赋值呢
static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作如下:
printf(“%d”,a);
a++;
}
int main()
{
staticLocalVar(); // 第一次调用, 输出a=0
staticLocalVar(); // 第二次调用, 记忆了第一次退出时的值, 输出a=1
return 0;
}
扩展资料
1、static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。
2、static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束。
3、但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。