最近比较闲,将C程序设计重新看了一遍,对static变量有了新的认识,现记录如下:
内存中供用户使用的空间有:
1、程序区
2、静态存储区
3、动态存储区
全局变量和static变量都存储在静态存储区。
以上知识我们都很清楚,但是为什么要用static呢?
下面我们来看一个例子:
#include <stdio.h>
int fun(int a)
{
int b =0;
static c = 3;
b = b + 1;
c = c + 1;
return (a+b+c);
}
int main()
{
int a = 2;
for(int i = 0; i<3; i++){
printf("%d\n" , fun(a));
}
return 0;
}
上面的程序,三次的输出结果分别为 7 8 9
分析可以知道,static局部变量c在后两次fun函数的时候,并没有被重新赋值为3,而是c=4 ,c=5 即上一次执行之后的值。
总结一下static的特点:
1、static局部变量属于静态存储区,在整个程序运行期间空间都不释放,哪怕其所属的那个函数已经执行完毕。
2、static局部变量是在编译的时候就赋值了的,也就是说,在程序运行的时候static局部变量已经有初值了。
3、虽然static局部变量在函数执行完毕后仍然存在与内存中,但是其他函数却不能引用它,只能被本函数引用。这也是他与全局变量唯一的不同点。
4、如果函数开始的时候不对static局部变量赋初值,那么static局部变量的初值为0 或者'\0',这与普通局部变量的不赋初值的话就为随机数不同。
5、静态全局变量,(注意,不是静态局部变量)的作用域并不是整个程序,而仅仅只是当前文件。