从变量的作用域的角度来观察,变量可以分为全局变量和局部变量;
全局变量都是存放在静态存储区中的。因此它们的生存期是固定的,存在于程序的整个运行过程局部变量,如果不专门声明存储类别,都是动态地分配存储空间的
从变量值存在的时间(即生存期)观察,变量的存储有两种不同的方式:静态存储方式和动态存储方式
静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式用户区
数据存放在静态存储区和动态存储区;
静态存储区:
全局变量全部存储在静态存储区;
程序开始执行时给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中占据固定的存储单元
动态存储区:
①函数形式参数
②函数中定义的没有用关键字static声明的变量
③函数调用时的现场保护和返回地址等存放在动态存储区
函数调用开始时分配,函数结束时释放。在程序执行过程中,这种分配和释放是动态的
对于局部变量来说,声明存储类型的作用是指定变量存储的区域以及由此产生的生存期的问题,而对于全局变量来说,声明存储类型的作用是变量作用域的扩展问题
每一个变量和函数都有两个属性: 数据类型和数据的 存储类别
存储类别指的是数据在内存中存储的方式(如静态存储和动态存储)
存储类别包括: 自动的、静态的、寄存器的、外部的
根据变量的存储类别,可以知道变量的作用域和生存期
1.自动变量(auto变量)
2.静态局部变量(static局部变量)
希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值),这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明 用static 声明一个变量的作用是:
(1) 对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。
(2) 对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。
3. 寄存器变量(register变量)
一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的寄存器变量允许将局部变量的值放在CPU中的寄存器中现在的计算机能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定4.外部变量
一般来说,外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。
在一个文件内扩展外部变量的作用域
关于作用域和生存期的概念
对一个变量的属性可以从两个方面分析:作用域:如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域
生存期:如果一个变量值在某一时刻是存在的,则认为这一时刻属于该变量的生存期作用域是从空间的角度,生存期是从时间的角度二者有联系但不是同一回事
