目录
1.动态存储方式和静态存储方式
变量的属性有作用域和存储期(也称生命期)等。作用域是从空间的角度来分析的,分为全局变量和局部变量。存储期是指变量在内存中的生命周期,这是从变量值存在的时间角度来分析的。存储期可以分为静态存储期和动态存储期。这是由变量的静态存储方式和动态存储方式决定的。
所谓静态存储方式是指在程序运行期间,系统对变量分配固定的存储空间。而动态存储空间则是在程序运行期间,系统对变量动态地分配存储空间。
内存中供用户使用的存储空间可分为3部分,即程序区、静态存储区和动态存储区。程序中所用的数据分别存放在静态存储区和动态存储区中。
全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储单元,程序执行完毕就释放这些空间。在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。
在动态存储区中存放以下数据:(1)函数形式参数。(2)函数中定义的变量(指未加static的局部变量)。(3)函数调用时的现场保护和返回代码等。对于这些数据,在函数调用开始时分配动态存储空间,函数调用结束时释放这些空间。在程序执行过程中,这种分配和释放是动态的。如果在一个程序中两次调用同一函数,则要进行两次分配和释放,而两次分配给此函数中局部变量的存储空间地址可能是不相同的。如果在一个程序中包含若干个函数,每个函数中的局部变量的存储期并不等于整个程序的执行周期,它只是整个程序执行周期的一部分。根据函数调用的情况,系统对局部变量动态地分配和释放存储空间。
在C++中变量除了有数据类型的属性之外,还有存储类别的属性。存储类别指的是数据在内存中存储的方法。综上,存储方法有静态存储和动态存储两大类。C++中变量的存储类别有4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。根据变量的存储类别,可以知道变量的作用域和存储期。
2.自动变量
函数中的局部变量,如果不加关键字static加以声明,编译系统对它们是动态地分配存储空间的。函数的形参和在函数中的定义的变量(包括在复合语句中定义的变量),都属于此类。在调用该函数时,系统给形参和函数中定义的变量分配存储空间,数据存储在动态存储区中。在函数调用结束时就自动释放这些空间。如果是在复合语句中定义的变量,则在变量定义时分配存储空间,在复合语句结束时自动释放空间。因此这类局部变量称为自动变量(auto viriable)。自动变量用关键字auto作存储类别的声明(auto可省略)。如:
int f(int a) //定义f函数,