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;
可以出现任意多次

C++ 全局变量和全局静态变量有什么区别呢?
1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量。2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。3. 全局变量、静态...

C语言静态局部变量和全局变量有什么区别,不都是在整个程序中都有效吗...
按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量...

请问C++语言里静态变量和全局变量有什么区别?谢谢
静态全局变量具有全局作用域作用于定义它的程序文件但是不能作用于项目里的其它文件,这一点和全局变量不同。静态全局变量可以被多次初始化。6. 把局部变量改变为静态变量之后是改变了它的存储方式和生命期。把全局变量改变为静态变量之后是改变了它的作用域,限制了使用范围 7. 看以下几个例子 \/\/测试静...

静态变量和局部变量和全局变量的区别
1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间 2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量...

全局变量,静态全局变量,静态局部变量和局部变量的区别1
这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量...

C#静态全局变量和静态局部变量有什么区别?
生命周期和作用域不一样,全局变量拥有全局生命周期,也就是说这段程序不管什么地方都可以引用;局部变量的话只有在定义的那段代码或者类或者方法内引用,一旦这个方法或者类运行结束,那么这个变量就销毁了

局部变量,静态全局变量,静态局部变量的区别和联系
直到程序结束。也就是说,局部变量和其它两个,最明显的区别:1 生命周期不同 2 分配时间不同 3 分配位置不同。而另外两个,在这几项上是相同的,之间的区别在于作用域。静态全局变量,作用域为定义改变量的所在文件。而静态局部变量,作用域与普通局部变量一样,都是定义位置到所在大括号结束。

全局变量和静态局部变量有什么区别
静态局部变量在函数调用结束后不自动释放,保留函数调用结束后的值;全局变量:在函数外定义的变量称为全局变量;全局变量在静态存储区分配存储单元,在程序运行期间都不释放,在文件中的函数均可调用该全局变量,其他文件内的函数调用全局变量,需加extern声明;静态全局变量:在函数外定义变量时,若加上...

说明全局变量,局部变量,静态变量,自动型变量的含义和区别
全局变量就是对于整个程序,都可以调用的变量,但程序里面不一定就只是一个程序,也可能调用其他子程序,只在子程序里面声明并起到作用的就是局部变量,静态变量就是指变量的地址不变,也就是说变量,本质上就是一个寄存器或者存储区,每个存储的位置都是有固定的地址,以便访问,但有时候,并不一定要一...

请用自己的话解释全局变量与局部变量的区别,静态变量与自动变量的区别...
全部变量就是在整个工程工都可以调用。比如我在一个标准模块中定义了一个全局变量,那么我无论是在窗体1还是窗体2还是其他地方都可以调用它。而局部变量就不行,比如我在某个窗体定义了一个变量,那么这个变量我就只能在这个窗体中使用。静态变量,就是当我执行完一个过程后,它的值保存下来了。下次再...

相似回答