C++ 全局变量、静态全局变量和静态局部变量的异同?能结合代码详细分析一下吗?谢谢

如题所述

全局变量:在函数内定义的变量时局部变量,而在函数之外定义的变量称为外部变量。而外部变量是全局变量;全局变量可以为本文件中的其他函数所共用;它的有效范围从定义变量的位置开始到本源文件结束。静态局部变量:有时希望函数中的局部变量的值调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,改变量已有值了,就是上一次函数调用结束时的值。静态全局变量:有时在程序设计中希望某些外部变量(全局变量)只限于被本文引用,而不被其他文件引用。而这种不是静态存储,跟全局变量都是静态存储方式,只是作用范围不一样的,都是在编译时分配内存。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-18
全局变量与静态全局变量的主要区别是:作用域不同.全局变量的作用域不仅在本文件中可以使用,在其他文件中也可以使用.但静态全局变量只能在本文件中使用.如假设在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.cppextern 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;}本回答被网友采纳
第2个回答  2013-09-18
全局变量:作用域是整个文件,生存期是直到程序结束静态全局变量:作用域是当前文件,生存期是直到程序结束静态局部变量:作用域是当前的函数或者复合语句,生存是其函数执行结束
第3个回答  2013-09-18
上面三个类型的数据都存储在静态存储区域。不同点:全局变量在程序个工程文件中有效,静态全局变量只在定义它的文件中有效,静局部变量只在定义它的块中有效。
第4个回答  2013-09-18
全局变量:/*#include "iostream.h"
int i;
int j;

#include "iostream.h"
extern int i;
extern int j;int i;
int j;
是真的定义
extern int i;
extern int j;
只是声明i,j是全局变量
一个程序中
int i;
int j;
只能出现一次
extern int i;
extern int j;
可以出现任意多次