【现实世界的数据描述】
【1】局部变量与全局变量
全局变量在程序的全部执行过程中都占用存储单元,而不仅在需要时开辟;
局部变量在调用时由所在的函数临时分配存储单元,而在函数调用结束后存储单元马上释放;
【2】变量的存储方式和生存周期
从变量的作用域,变量分为全局和局部;
变量的存储有两种不同的方式:静态存储和动态存储。静态,指由系统分配固定的存储空间的方式;动态,则程序运行期间根据需要进行动态的分配。
动态存储区域主要存放以下数据:
1)函数形式参数,在调用函数时给形参分配存储空间
2)函数中没有用关键字static声明的变量,即自动变量
3)函数调用时的现场保护和返回地址
每个变量和函数都有两个属性:数据类型和数据的存储类别;
C的存储类别包括:自动的(auto)、静态的(statis)、寄存器的(register)、外部的(extern)。根据变量的存储类别即可知变量的作用域和生存周期;
局部变量的存储类别
1)auto,函数的形参和函数或复合语句中定义的局部变量
2)statis,函数的局部变量值在函数调用结束后不消失,而是继续保留原值,即占用存储单元不释放。
静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。
静态局部变量是在编译时赋初值,即只赋初值一次。以后每次调用函数时不再重新赋初值而是保留上次函数调用结束时的值。自动变量赋初值是在函数调用时进行,且每次调用重新赋初值。
静态局部函数虽然在函数调用后仍然存在,但其他函数不能引用它,仅限本函数;
3)register,将局部变量的值放在CPU寄存器中,而不再到内存中存取;
全局变量的存储类别
全部变量生存期是固定的,存在于程序的整个运行过程,作用域是从变量定义处开始,到本程序文件的末尾。
1)在一个文件中扩展外部变量的作用域
如果不在文件的开头定义,则全局的作用范围限于定义处到文件结束处。如果在定义点之前的函数需要引用该外部变量,则应该在引用之前用关键字extern对变量作“外部变量声明”,即扩展外部变量的作用域到此位置。
2)将外部变量的作用域扩展到其他文件
在任意文件中定义外部变量,在其他文件中用extern做外部变量声明。
3)将外部变量的作用域限制在本文件中(statis声明)
将本文件的外部变量对外界屏蔽,静态外部变量。