一 static类型
static变量(全局或局部)都存在内存的静态存储区(data bss)
二 static 全局变量
特点 :
1 未初始化的变量自动初始化为0;
2 作用域改变(之前是整个工程,现在局限在文件中)。对别的文件不可见,即别的文件即使extern 也不能使用该变量;
3 其他文件可以使用相同名字的变量,不会发生冲突;
例如
main.c
static int a = 0;
int main()
{
printf("%d\n",a);
}
hello.c
int a = 10;
gcc main.c hello.c 结果正常
但将mian.c 中的static去掉,则编译不通过;
三 static 局部变量
特点
1未初始化的变量自动初始化为0;
2作用域没有改变(还是定义的函数内,只不过是函数调用完后 static变量不马上销毁,等到程序结束);
3 定义为static类型的局部变量,再次进入该函数,可以保留该变量的值。
例如:
void myprint()
{
static int k = 10;
printf("%d\n",k++);
}
int main()
{
myprint();
myprint();
return 0;
}
结果 :10
11
可知当函数再次被调用是static变量的值被保留了;
若将myprint()中的static去掉,则结果是
10
10
四 static函数
情况和static全局变量差不多;