静态局部变量与静态全局变量?
代码1.
[code=C/C++][/code]/*#include <iostream>
using namespace std;
int a=5;
void vbc(){
static int a=10;//静态局部变量
a++;
cout<<"a="<<a<<endl;
}
void vbc1(){
int a=10; //局部变量
a++;
cout<<"a="<<a<<endl;
}
int main()
{
cout<<"main a="<<a<<endl; //5
vbc(); //11
vbc(); //12
vbc1(); //11
vbc1(); //11
cout<<"main a="<<a<<endl; //5
return 0;
}*/
2.
[code=C/C++][/code]/*#include <iostream>
using namespace std;
static int a=5; //静态全局变量
void vbc(){
int a=10;
a++;
cout<<"a="<<a<<endl;
}
void vbc1(){
int a=10;
a++;
cout<<"a="<<a<<endl;
}
int main()
{
cout<<"main a="<<a<<endl; //5
vbc(); //11
vbc(); //11(为什么当再次调用函数时,不是12?它不是静态的吗?与代码1的区别只是,它是静态全局变量)
vbc1(); //11
vbc1(); //11(同上)
cout<<"main a="<<a<<endl; //11
return 0;
}*/
我的问题是,静态局部变量的生存周期是整个程序,一旦调用函数时改变变量的值,变量的值就跟着改变,并且一直改变;那静态全局变量为什么不是呢?
[解决办法]
看到这个帖子,我昨天又看了一会书。
静态局部变量只在函数内有效,特点就是只初始化一次,以后的运算均保留上次的结果,出了函数后,变量值存在,但不能被引用。
静态全局变量仅限于本文件中使用,而全局变量可以用entern声明,扩展它在本文件内的作用域,同时可以扩展到其它文件中去。
static有两个作用,对于局部变量,static将其由动态存储方式变为静态存储方式,仅限于函数内使用;对于全局变量,static将其局部化,仅限于本文件内使用,但其仍是静态存储方式。所以只要用到static,其作用域总是有限制的。
[解决办法]
静态全局变量其实并非“全局”的,只在定义它的文件中可见。
参考:
static关键字