转载: C语言中static修饰符的意义
1、由static修饰的变量,其存储类型为全局静态区,变量在程序的整个运行过程中不会被销毁,并且只会被初始化1次。
void func1()
{
static int var1 = 1; // 在全局静态区分配变量var1的存储空间
int var2 = 1; // 在栈上分配var2的存储空间
var1 = var1+1;
var2 = var2+1;
printf("var1=%d, var2=%d", var1, var2)
}
void main()
{
func1();
func1();
func1();
}
代码输出:
“var1=2, var2=2”
“var1=3, var2=2”
“var1=4, var2=2”
2、通过static修饰,可以把函数的作用域限定在本源文件内,把全局变量的作用域限定在本源文件内
由于全局变量和函数的作用域是所有源文件,所有源文件引用的是同一个全局变量和函数,因此C语言不允许在2个源文件内定义相同的全局变量、函数,在代码链接阶段会提示链接错误。通过添加static修饰,可以让2个源文件定义相同的全局变量和函数,但是注意这2个源文件引用的全局变量和函数是独立的。
static int var1 = 1; // 限定全局变量var1仅在本源文件可见
static void func1() // 限定函数仅在本源文件可见
{
static int var2 =1; // var2是静态变量,不是栈变量,只被初始化一次
}
void main()
{
func1();
}
网友评论