static静态变量在C语言中的作用
static
静态变量:在内存中存储在全局区,如果没有手动初始化,则其初始值为 0
1、限制作用域
当我们不希望某个变量或者函数被访问的时候,可以使用 static
变量
举例:我们首先定义两个源文件 main.c
和 test.c
,内容分别如下
// main.c
#include <stdio.h>
int main() {
func();
}
// test.c
#include <stdio.h>
int a = 10;
void func() {
printf("%d\n", a);
}
这里可以看到,我们并没有使用 static
变量,也没有打开自定义头文件,这时候我们使用 gcc
命令来编译这两个源文件
gcc main.c test.c -o main
会得到一个可执行文件,运行可执行文件,得到以下输出结果
可以看到,就算我们没有打开自定义头文件,依然会使用到其它源文件里面的函数。
重点来了
当我们想把某个变量或者函数限制在当前源文件的作用域的时候,只需要在变量或函数前面加上 static
关键字即可
test.c
修改如下:
// test.c
#include <stdio.h>
int a = 10;
static void func() {
printf("%d\n", a);
}
当修改 test.c
之后,再次编译这两个源文件,这时候就会编译失败,因为 func()
函数被限制在 test.c
源文件里面,如果其它源文件想要访问 func()
函数,需要通过在 test.c
源文件里面在写一个函数,然后通过这个函数调用 func()
函数。
2、管理生命周期
因为 static
变量会存储在内存中的全局区,所以 static
变量随着程序结束而结束
比如我们在函数里面写一个 static
变量用来计数,源文件如下
#include <stdio.h>
void func() {
static int num = 0;
printf("%d\n", ++num);
}
int main() {
for (int i = 0; i < 5; i++) {
func();
}
}
运行结果如下:
可是如果没有使用 static
变量,那么结果就会像下面这样,