static静态局部变量
1.static
1.1 分类
函数内部:用static关键字定义的变量称为静态局部变量
函数外部:用static关键字定义的变量称为静态全局变量
1.2 区别
静态局部变量只能在函数内部被调用
1.3 注意
在程序执行时,静态局部变量在内存的静态存储区中也占据永久性的存储单元。即退出函数后,再次进入该函数时,静态局部变量仍然使用原来的存储单元。
对于静态局部变量,初始化仅仅执行一次,如何理解这句话,例如:
void fun(){
static int n;
n++;
printf("%d\n",n);
}
int main(){
fun();
fun();
fun();
return 0;
}
返回
1
2
3
如果对变量显式初始化呢?例如:
void fun(){
static int n=1;
n++;
printf("%d\n",n);
}
int main(){
fun();
fun();
fun();
return 0;
}
返回
2
3
4
可见,无论调用几次函数,函数中的静态局部变量都只经历一次初始化
2.static全局变量与普通的全局变量
全局变量的说明之前再加以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。
区别:非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。
从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。