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

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

这种加上static声明、只能用于本文件的外部变量(全局变量)称为静态外部变量。这就为程序的模块化、通用性提供了方便。如果已知道其他文件不需要引用本文件的全局变量,可以对本文件中的全局变量都加上static,成为静态外部变量,以免被其他文件误用。

需要指出,不要误认为用static声明的外部变量才采用静态存储方式(存放在静态存储区中),而不加static的是动态存储(存放在动态存储区)。实际上,两种形式的外部变量都用静态存储方式,只是作用范围不同而已,都是在编译时分配内存的。

C++变量属性小结

一个变量除了数据类型以外,还有3种属性:

存储类别 C++允许使用auto,static,register和extern 4种存储类别。

作用域 指程序中可以引用该变量的区域。

存储期 指变量在内存的存储期限。

以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。

要注意存储类别的用法。auto, static和register 3种存储类别只能用于变量的定义语句中,如:

 

 
  1. auto char c; //字符型自动变量,在函数内定义  static int a; //静态局部整型变量或静态外部整型变量 
  2. register int d; //整型寄存器变量,在函数内定义  extern int b; //声明一个已定义的外部整型变量 

说明: extern只能用来声明已定义的外部变量,而不能用于变量的定义。只要看到extern,就可以判定这是变量声明,而不是定义变量的语句。

下面从不同角度分析它们之间的联系。

1) 从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:

局部变量

自动变量,即动态局部变量(离开函数,值就消失)