static关键字的作用和场景大致可分为2个(或者3个),即修饰变量和函数(或者修饰局部变量、全局变量和函数),这三种场景下的static关键字作用不同。
修饰局部变量:
由于是静态局部变量,只对本作用域有效,其他函数不可见;可以被重新赋值(之前错把静态变量只初始化一次理解为只能幅值一次);但是只能被初始化一次。这是它的特性。
以下实例代码能帮助理解
for (int i = 0; i < 5; i++)
{
static int t_static = 0;
int t = 0;
t = t + 2;
t_static = t_static + 2;
printf("第%d次循环:t=%d; t_static=%d\n", i,t, t_static);
}
输出打印:
第0次循环:t=2; t_static=2
第1次循环:t=2; t_static=4
第2次循环:t=2; t_static=6
第3次循环:t=2; t_static=8
第4次循环:t=2; t_static=10
除了初始化和内部存储区域外,静态局部变量其他性质和局部变量是差不多的,比如在for循环外不能使用t_static变量,必须是同一作用域,在某一个函数声明静态局部变量,其对另一个函数是不可见的。
static 修饰局部变量后,变量的储存区域也发生了改变,由原来的动态存储区变为静态存储区。程序未初始化变量时默认初始化为0;同时变量的生存周期也发生改变,变为从定义到程序结束。但作用域未改变。
变量的存储区域、静动态、全局和局部等知识点参考文章C语言存储类别
修饰全局变量
static修饰全局变量,其实就是把该变量的作用域缩小了。一般全局变量对被程序编译时所有的.c文件可见,即其他文件也可使用该全局变量,但是使用static关键字修饰后,只能对定义变量的那个.c文件可见,其他文件的函数不可调用。
修饰函数
static关键字修饰函数与修饰全局变量作用类似,也是改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用。
参考文献
标签:函数,局部变量,关键字,static,修饰,全局变量 From: https://www.cnblogs.com/gofan-SiTu/p/17707120.html