C语言关键字:static
static的三个用法:
1.修饰全局变量. 全局变量不可被extern拐到别的文件
2.修饰局部变.只有本函数才能使用,并且只能被初始化一次.
3.修饰函数. 函数作用域为本文件,其他文件不可调用
修饰全局变量:如果有一个文件试图extern 这个全局变量那么编译器会报错(vc6.0,gcc都测试过),这一点估计学过C的都清楚我们重点来看第二跟第三:
下面我们来看一个程序:
#include<stdio.h>
void f2()
{
static int a;
printf("a=%d a的地址:%d\n",a,&a);
}
void f()
{
static int a=1;
a++;
printf("a=%d a的地址:%d\n",a,&a);
}
int main()
{
f();
f();
f();
f2();
return 0;
}
能说出结果吗?不论说不说得出还是在编译器里面跑一下吧。
看到结果了吧。
从这个程序我们可以得出以下几点结论
1.static 修饰的变量会放在程序的静态存储区,如果没有被赋值的话那么它会被默认赋值为0(没有static修饰的局部变量可没有这个待遇,其实只要是存储在静态储存区的变量如果没赋值都会被赋值为0)
2.static修饰的局部变量生命周期开始于定义结束于整个进程结束(静态存储区的变量都有这个特性)。
3.static 在不同函数中修饰名字一样的变量,虽然都在静态存储区但不会命名冲突(进程会为不同函数映射不同的存储位置)
4.static修饰的变量只能被初始化一次。
附:程序运行结果图:VC6.0下:
GCC编译器下: