深入理解C++中变量的存储类别和属性

2020-01-06 13:47:29王冬梅

静态局部变量(离开函数,值仍保留)

寄存器变量(离开函数,值就消失)

形式参数(可以定义为自动变量或寄存器变量)

全局变量

静态外部变量(只限本文件引用)

外部变量(即非静态的外部变量,允许其他文件引用)

2) 从变量存储期(存在的时间)来区分,有动态存储和静态存储两种类型。静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元。

动态存储

自动变量(本函数内有效)

寄存器变量(本函数内有效)

形式参数

静态存储

静态局部变量(函数内有效)

静态外部变量(本文件内有效)

外部变量(其他文件可引用)

3) 从变量值存放的位置。可分为:

内存中静态存储区

静态局部变量

静态外部变量(函数外部静态变量)

外部变量(可为其他文件引用)

内存中动态存储区: 自动变量和形式参数

CPU 中的寄存器: 寄存器变量

4) 关于作用域和存储期的概念。

从前面叙述可以知道,对一个变量的性质可以从两个方面分析,一是从变量的作用域,一是从变量值存在时间的长短,即存储期。前者是从空间的角度,后者是从时间的角度。二者有联系但不是同一回事。下图是作用域的示意图,下图是存储期的示意图。

深入理解C++中变量的存储类别和属性

深入理解C++中变量的存储类别和属性

如果一个变量在某个文件或函数范围内是有效的,则称该文件或函数为该变量的作用域,在此作用域内可以引用该变量,所以又称变量在此作用域内“可见”,这种性质又称为变量的可见性,例如图中变量a?b在函数f1中可见。

如果一个变量值在某一时刻是存在的,则认为这一时刻属于该变量的存储期,或称该变量在此时刻“存在”。下表表示各种类型变量的作用域和存在性的情况。

深入理解C++中变量的存储类别和属性

其中“√”表示是,“X”表示否。可以看到自动变量和寄存器变量在函数内的可见性和存在性是一致的。在函数外的可见性和存在性也是一致的。静态局部变量在函数外的可见性和存在性不一致。静态外部变量和外部变量的可见性和存在性是一致的。