8.6 标识符的作用域和存储类别
考点7 标识符的作用域和存储类别
真考链接
考点7 涉及的内容是变量的存储类别,一般以选择题的形式出现。此考点属于应理解的内容,在选择题中的考核概率为20%,在操作题中的考核概率为10%。
1. 局部变量和全局变量
局部变量是指在函数内部或复合语句内部定义的变量,局部变量也称为内部变量。函数的形参属于局部变量。
在一个函数内部定义的变量,它们只在本函数范围内有效,即只有本函数才能使用它们,其他函数不能使用这些变量,将这些变量称为“局部变量”。不同函数中可以使用具有相同名字的局部变量,它们代表不同的对象,在内存中占不同的单元,互不干扰。
在函数之外定义的变量称为外部变量,外部变量是全局变量。全局变量可以为本文件中其他函数所共用,它的有效范围从定义变量开始到本文件结束。
2.变量的存储类别
每一个变量和函数所具有的两个属性是:数据的存储类别和数据类型(在前面已经介绍过)。所谓的存储类别指的是数据在内存中存储的方法,其可分为两类:静态存储类和动态存储类。具体包括自动(auto)、静态(static)、寄存器(register)和外部(extern),共4种。
当在函数内部或复合语句内定义变量时,如果没有指定存储类别,或使用了auto说明符,系统就认为所定义的变量属于自动类别。
例如:floata;等价于autofloata;。
当函数体(或复合语句)内部用static来说明一个变量时,可以称该变量为静态局部变量。
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字 static进行声明。
真题精选
【例1】以下叙述中,正确的是( )。
A.局部变量说明为static的存储类,其生存期将得到延长
B.全局变量说明为static的存储类,其作用域将被扩大
C.任何存储类的变量在未赋初值时,其值都是不确定的
D.形参可以使用的存储类说明符与局部变量完全相同
【答案】A
【解析】选项A,局部静态变量的存储空间在程序整个运行期间都不释放,所以比局部动态变量的生存期长。选项B,全局变量说明为静态存储时,作用域不会扩大。选项C,局部静态变量未赋初值时,系统编译时会自动赋初值0或空字符。选项D,在未调用函数时,函数的形参不占内存的存储单元,只有调用时才动态分配存储空间,所以形参不能说明为静态存储,而局部变量可以说明为静态存储。
【例2】在C语言中,形参的默认存储类说明是( )。
A.auto B.static C.register D.extern
【答案】A
【解析】当在函数内部或复合语句内定义变量时,如果没有指定存储类别,或使用了auto说明符,系统就认为所定义的变量属于自动类别。