本文摘选自陈正冲老师的《C语言深度解剖》第一版
在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。
1、 修饰变量
修饰的变量又分为局部变量和全局变量,但都存储在内存的静态区。
1)静态全局变量,作用域仅限于变量定义的文件中,其他文件使用extern声明也无法调用。即,作用域为从定义开始到本文件结束,在定义处之前的函数也不能使用它。若没有初始化,默认为0。
2)静态局部变量,在函数体内定义,仅在本函数内起作用。但由于静态变量在内存的静态区,所以函数运行结束,静态变量值不会被销毁,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
Static int j;
void fun(void)
{
Static int i = 0;
print(“i = %d”,i);
i++;
}
Void fun1(void)
{
j = 0;
print(“j = %d”,j);
j++;
}
int main()
{
for(k=0;k<3;k++)
{
fun();
fun1();
}
return 0;
}
i =0
j =0
i =1
j =1
i =2
j =2
2、 修饰函数
修饰函数,函数前加static使得函数成为静态函数。但此处的static的含义不是指存储方式,而是指对函数的作用域仅限于本文件(即又称内部函数),它的好处是:不同人编写不同函数时,不用担心自己定义的函数,是否会与其他文件中的函数同名。