C++ 全局变量和全局静态变量有什么区别呢?

为什么我在一个文件define中定义的全局静态变量在其他的文件中include “define”后,就直接使用吗,不是说不能使用吗?
code(define .h):
const char* TEST1 = "TEST1";
static const char* TEST22 = "TEST22";
依据是——————
2、全局静态变量是显示用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。

??????????为什么呢?
纠结啊~~

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

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

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

    变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。

    在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-12
  C++ 全局变量和全局静态变量的根本区别还是作用域的区别。
  1、全局变量是不显示用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量;
  2、全局静态变量是显示用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。
第2个回答  推荐于2017-10-06
1、全局变量是不显示用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
2、全局静态变量是显示用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。本回答被提问者采纳
第3个回答  2010-12-09
你理解的基本正确!

局部变量空间,就是堆栈空间,也就是栈空间。
从局部变量声明的时候,它就在堆栈空间了,而不是调用函数的时候,才让它入栈的。
堆和栈是两码事情,通常我们所说的堆栈,是指栈。

堆,是一种结构,是从全局区,分配一段区间,然后由一种内存分配算法进行管理。
另外,还有一个区,是常量区。
第4个回答  2010-12-08
作用域不同。
全局静态变量的作用域是文件,离开了所在文件就不认了,而全局变量是整个工程内可见的。
全局变量,在非定义所在文件使用的时候,只要用extern声明一下即可使用,静态的就不行了。
这些都是C语言的语法规则,记住了就行了,我们小人物只有去适应,以后你厉害了,可以参与C语言规则的修订,把它改了,就不纠结了!嘻嘻。
祝你好运!
相似回答