static 关键字

发布时间 2023-09-16 18:52:11作者: ^_^ok

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文件可见,其他文件的函数不可调用。

image

image

修饰函数

static关键字修饰函数与修饰全局变量作用类似,也是改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用。

参考文献

  1. 【C语言】 Static关键字的用法和详解