请问C++语言里静态变量和全局变量有什么区别?谢谢

还见到过静态全局变量什么的,我觉得那就是包含了静态变量和全局变量的各自的特点,我感觉静态和全局是从两个不同的角度看待变量的,但是究竟是什么角度,刚才查的一些都比较零碎,希望能得到条理比较清晰而且比较全面的答案,主要从二者的使用上说有什么区别和联系,不是说在内存的哪个区存着。谢谢,非常感谢!
这怎么还冒出广告来了~P
那篇文章里好像没有全局变量啊
三楼说的意思是静态变量定义的时候就要初始化而且不能改??相当于一个常量??

1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量。

2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。

3. 全局变量、静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间。

4. 全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序文件,静态局部变量则是当前函数体内。
全局变量和静态全局变量、静态局部变量默认值都是0,也就是在没有初始化变量值的时候默认为0。

5. 静态变量包含静态局部变量和静态全局变量。
静态局部变量具有局部作用域只对定义自己的函数可见,只被初始化一次,自从初始化一次之后直到程序运行期间一直都在。
静态全局变量具有全局作用域作用于定义它的程序文件但是不能作用于项目里的其它文件,这一点和全局变量不同。静态全局变量可以被多次初始化。

6. 把局部变量改变为静态变量之后是改变了它的存储方式和生命期。
把全局变量改变为静态变量之后是改变了它的作用域,限制了使用范围
7. 看以下几个例子
//测试静态局部变量
int Fun(void){
//声明一个静态局部变量
static int num = 0;
++num;
return num;
}
for(int i = 0; i < 10; i++){
cout<<Fun()<<" ";
}
/*
输出结果是
1 2 3 4 5 6 7 8 9 10
*/
/*解释如下
1. 静态局部变量只会被初始化一次,因此第一次调用Fun函数的时候num被初始化为0
2. 然后每次调用的时候++num,第一次调用++num为1;第二次++num为2......
3. 静态局部变量的生命期是整个程序因此值可以保存下来*/
//声明一个静态全部变量
static int value;

//测试静态全局变量
void G(void){
value = 0;
++value;
}

for(int i = 0; i < 10; i++){
G();
cout<<value<<" ";
}
/*
输出1 1 1 1 1 1 1 1 1 1
解释
1. 静态全局变量可以被初始化多次,因为每次调用G函数都会对静态全局变量初始化为0
2. 每次value的值都初始化为0,++value为1,因此输出的值为1
*/
//测试静态局部变量
int Get(int x){
static int count = x;
return count+x;
}
printf("%d %d\n", Get(4), Get(5));
/*
输出9 10
解释:
1.printf是一个函数,根据函数参数入栈的顺序是从右到左,则先调用Get(5)再调用Get(4)
2.调用Get(5)的时候,count第一次被初始化为5,则返回10;第二次调用Get(4)的时候count不再被初始化值为5返回9
*/
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-20
全局变量声明之前加上static,就是静态全局变量。全局变量和静态全局变量都是静态存储的;在存储上无区别。区别在于他们的作用域;全局变量的作用域是整个源程序,当源程序有多个源文件组成时,全局变量在各个源程序文件都是有效的;而静态全局变量怎被限制了作用域,只在定义该变量的源文件内有用在同一程序的其他源文件不能使用!
还有静态全局变量只初始化一次,防止在其他源文件调用!而全局变量可以再其他源文件初始化!!
这样说楼主明白了吗?本回答被提问者和网友采纳
第2个回答  2010-03-20
建议去看看这篇文章
http://techbbs.zol.com.cn/1/10_2375.html看完就可以明白了
第3个回答  2010-03-20
从生存周期上看2者是一致的,都是程序运行就有了,在退出时释放。从作用域上看,静态变量有局部这个类型,它的作用域小。
锐英源教育--A+网校:面向问题的教学专家,锻造实践能力的引导者。
结合工作经验、开源、英语、视频教学、在线教学、阶段式兴趣和实践。
面授小班授课,加强记忆,从头到尾结合实践。
网校是视频教学和在线交流结合的。视频通俗易懂逐渐深入,在线灵活生动结合具体代码,可以结合例子,远程协助进行指导。

请问C++语言里静态变量和全局变量有什么区别?谢谢
4. 全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序文件,静态局部变量则是当前函数体内。全局变量和静态全局变量、静态局部变量默认值都是0,也就是在没有初始化变量值的时候默认为0。5. 静态变量包含静态局部变量和静...

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

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

C++ 全局变量和全局静态变量有什么区别?
2. 全局变量、静态全局变量、静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的。3. 全局变量、静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间。变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。

全局变量和静态全局变量有什么区别?
全局变量和静态全局变量的区别在于作用域不同 就是说一个项目里如果有多个源程序文件 非静态全局变量可以在所有源文件里调用 静态全局变量只能在本文件里调用,不允许在其他文件里调用 \/\/file1.cpp static int a;\/\/只能在file1.cpp里使用 int b; \/\/可以在file2.cpp里使用 extern int c; \/\/file...

静态(s_)、成员(m_)、全局(g_)变量在c++中有什么含义、作用?
静态变量定义后,所有对象的这个变量都分配同一个地址,改变一个对象的这个变量会影响其他对象的一个变量。成员变量,在每创建一个对象时都会分配一个不同的地址空间,改变其中一个对象的这个变量,并不会影响其他成员的这个变量。成员变量的作用域,也就是有效范围是整个类。全局变量是说明语句不在任何一...

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

c++中的常量和静态有什么区别?
静态是说:“它是在静态数据区的变量”,static影响变量的作用域和存储域。实际上,C++标准不赞成在名称空间和全局作用域中使用关键字static(该标准使用“不赞成”表明,这种做法,目前合法,但以后很可能将其视为非法)。例如,下面代码:static int nCount;int fun1();int main(){ …} int fun...

c++全局\/静态存储区和常量存储区是一样的吗
全局\/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的 C 语言中,全局变量又分为初始化的和未初始化的(初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过 void* 来访问和操纵,程序结束后由系统自行释放)...

C++中; 静态变量与动态变量有什么区别啊? 作用是什么?
C++中变量存储方式有三种,自动存储,静态存储,动态存储 自动存储简单意义上就是在函数内不用任何关键字直接定义的变量,它在函数被调用时被创建,在函数退出时自动消失,静态存储顾名思义就是在程序的整个运行过程中都存在,在函数体外定义的变量自动为静态存储方式,也可以在函数内使用static关键字定义 ...

相似回答