1.static 作用范围 :只能在一个文件里面。
假设 在一个cpp文件 test1.cpp里面声明 了静态全局变量 static int i =100; 在另外一个 一个cpp文件里面使用 i
执行 i++ 语句 ,编译器会提示 'i' : undeclared identifier 。编译器认为 没有声明i 变量。因为编译时 i 的的作用范围在test1.cpp 。
如果未加static关键字 ,那么无论是全局变量还是全局函数都具有全局可见性。
例如 在 test1.cpp中声明 int i=100;
在test2.cpp中写 入如下代码
int main()
{
exten int i;
i++;
cout<<i;
}
结果
2. 静态全局变量
1 静态变量被分配至全局数据区。
int i;
void main
{
static int k;
int j=0;
cout<<&i<<endl;
cout<<&k<<endl;
cout<<&j<<endl;
}
2 默认初始化值得
静态变量 默认初始化为 0 ,自动变量(函数体内部定义的变量)的值是随机的。例如 定义
static int i; //静态全局变量
int m; //全局变量
void main ()
{
static int j ; //局部静态变量
int k; //自动变量。
cout<<"i="<<i<<endl;
cout<<"j="<<j<<endl;
cout<<"m+"<<m<<endl;
cout<<"k+"<<k<<endl;
}
程序执行结果如下 的结果如下:
全局变量 ,静态全局变量, 局部静态变量的默认赋值为 0 ,自动变量默认赋值为一个随机值。
3.使用静态局部变量的意义
由于局部变量的的生存周期只在函数的调用过程,在函数调用结束后,存放在栈中的局部变量的值就被释放。
有时我们需要在函数调用期间保存中间变量,如果用全局变量实现之一功能。由于全局变量不属于该函数,所以函数将不能完全掌控该局部变量,给程序维护带来麻烦。所以使用静态局部变量就很好的解决了这一问题,静态局部变量即有局部变量的属性,也有全局变量的属性。
4.静态函数
在函数返回值值类型前面加上static关键字,函数就被声明为静态函数。
静态函数只在声明他的文件中可见看,static实现了函数对其他文件的隐藏。这样,在其他文件中就不能使用该函数,其他文件中可以出现与同名的函数而不会发生冲突。
二 面向对象中的static