首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

静态局部变量与静态全局变量?解决思路

2012-08-22 
静态局部变量与静态全局变量?代码1.[codeC/C++][/code]/*#include iostreamusing namespace stdint a

静态局部变量与静态全局变量?


代码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关键字

热点排行