首页 理论教育C语言程序设计实用教程:变量作用域

C语言程序设计实用教程:变量作用域

【摘要】:程序中的每个“变量灯”的“功率”大小不一,因此它们的作用域就不相同了。这一点表明形参变量只有在函数内才是有效的,这种变量的有效范围称变量的作用域。变量说明的方式不同,其作用域也不同。在内部变量的作用域内,外部变量将被屏蔽而不起作用。外部变量说明的一般格式:外部变量的作用域是从定义位置到本源文件结束。

什么是变量的“作用域”?打个比方,每个变量好比一盏灯,能照亮的区域就是它的“作用域”,在该区域内的任何地方都能“看到”它,自然也就能访问到该变量;出了这个区域就访问不到了,因为“看不到了”。

程序中的每个“变量灯”的“功率”大小不一,因此它们的作用域就不相同了。在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,这种变量的有效范围称变量的作用域。不仅形参变量,C语言中所有的变量都有自己的作用域。变量说明的方式不同,其作用域也不同。从作用域的角度看,可以将变量分为“局部变量”和“全局变量”。

1.局部变量

局部变量也称为内部变量,是在函数内部定义说明的。其作用域仅限于函数内, 离开该函数就不能再使用了。例如:

上面有两个函数,从中可以看到:

在函数f1 内定义了三个变量,a 为形参,b 和c 为一般变量。在 f1 的范围内a、b、c 有效。m、n 的作用域限于main()函数内。

(1)主函数main()中定义的局部变量,也只能在主函数中使用,其他函数不能使用。同时,主函数中也不能使用其他函数中定义的局部变量。因为主函数也是一个函数,与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。

(2)形参变量也是局部变量,属于被调用函数;实参变量,则是调用函数的内部变量。

(3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会混淆。

(4)在复合语句中也可定义变量,其作用域只在复合语句范围内。

例如:

2.全局变量

如果说局部变量是一盏只能照射到局部区域的“灯”,那么全局变量就是一盏能照射到整个程序的“灯”,因此,程序中的任何地方都能访问到全局变量。

在C 语言程序中,是以文件为单位进行编译的,在一个源程序文件中,也就是函数外部定义的变量称为全局变量,也称为外部变量,其作用域是从定义该变量的位置开始到程序结束。全局变量不属于哪一个函数,而属于一个源程序文件。在函数中使用全局变量,一般要作全局变量说明。只有在函数内经过说明的全局变量才能使用。但是在一个函数之前定义的全局变量,在该函数内使用时可不再说明。例如:

从以上可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x、y 定义在函数f1()之后,而在f1()内又没有对x、y 说明,所以它们在f1()内无效。a、b 定义在源程序第一行,因此在函数f1()、f2()及主函数main()内都有效,不加说明也可使用。(www.chuimin.cn)

说明:

(1)外部变量可加强函数模块之间的数据联系,但又因此使得这些函数的独立性降低。从模块化程序设计的观点来看有些不利,因此可尽量少用外部变量。

(2)在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。

(3)对于局部变量的定义和说明,可以不加区分。而对于外部变量则不然,外部变量的定义和说明并不是一回事。外部变量定义必须在所有的函数之外,且只能定义一次。

一般格式:

其中方括号内的extern 可以省去不写。

例如:

等效于:

外部变量的作用域是从定义点到本源程序文件结束。如果定义点之前的函数需要引用这些外部变量,需在函数内对被引用的外部变量进行说明。外部变量说明的一般格式:

(4)外部变量的作用域是从定义位置到本源文件结束。如果定义位置之前的函数需要引用这些变量时,需在函数内对被引用的外部变量进行说明。引用外部变量说明语句格式:

(5)外部变量在定义时就已分配了内存单元,外部变量定义可作初始赋值,外部变量声明不能再赋初始值,只是表明在函数内要使用某外部变量。

(6)外部变量的定义和外部变量的说明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量的说明,出现在要使用该外部变量的函数内,而且可以出现多次。

【例5.15】外部变量的定义与说明。

外部变量在最后定义,因此在前面函数中对要用的外部变量必须进行说明。外部变量xl,xw 和函数vs()的形参xl,xw 同名。外部变量都作了初始赋值,主函数main()中也对xl 作了初始化赋值。执行程序时,在printf()语句中调用vs()函数,实参xl 的值应为main()中定义的值5,外部变量xl 在main()内不起作用;实参xw 的值为外部变量xw 的值4,进入vs()后这两个值传送给形参xl,函数vs()中使用的xh 为外部变量,其值为5,因此v 的计算结果为100,返回主函数后输出。