全局变量与静态全局变量的主要区别是:作用域不同.
全局变量的作用域不仅在本文件中可以使用,在其他文件中也可以使用.但静态全局变量只能在本文件中使用.
如假设在1.cpp里定义了一个全局变量int g_val=1;一个静态全局变量int s_val=2
在2.cpp里可以正常使用g_val这个变量,但是不能访问s_val这个变量.
//1.cpp
#include<iostream> using namespace std;
int g_val=1; static int s_val=2; int main() { return 0;
} //2.cpp
extern int g_val;//要加extern关键字 extern int s_val;//虽然这个也可引用 void test() { g_val=0; s_val=3;//这里访问出错. }
静态局部变量与一般局部变量的区别就是:生存期不同
静态局部变量的生存期在程序运行期间都存在,下一次会引用上次访问的值.
如
#include<iostream> using namespace std; void fun() { int i=0;//下一次进来的时候这步仍执行,即i又变回0 static int val=0;//只初始化一次,下一次进来这个函数的时候,val的值是引用上次的值.而不是0 val++; i++; cout<<"静态局部变量:"<<val<<endl; cout<<"一般局部变量:"<<i<<endl;
} int main() { fun(); fun(); return 0;
}
|