首页 理论教育C++程序设计基础教程:全局与局部变量简介

C++程序设计基础教程:全局与局部变量简介

【摘要】:因此,局部变量只能在定义它的函数体或块内部使用,而不能在其他函数或块内使用这个变量。在不同的函数中可声明具有相同变量名的局部变量,系统会自动进行识别。这种全局变量称为“外部变量”。例如:上述程序的输出结果为8,因为main函数中的局部变量a屏蔽了全局变量a。static局部变量在整个程序结束才会释放其存储空间。

1.变量作用域

变量作用域是指变量的有效范围,一个变量只有在其有效范围内才能存取它的值。变量作用域有以下几个级别:

◇块级作用域:变量在一个块(复合语句)内部定义,其有效范围从它定义开始到块结束终止。

◇函数级作用域:变量在一个函数内部定义,其有效范围从它定义开始到函数结束终止。

◇文件级作用域:变量在一个文件中所有函数的外部定义,其有效范围从它定义开始到文件结束终止。

◇程序级作用域:变量在一个程序中定义,其有效范围从它定义开始到程序结束终止。

2.局部变量

作用域在函数级和块级的变量称为局部变量,也就是说,局部变量在一个函数或块内部定义。因此,局部变量只能在定义它的函数体或块内部使用,而不能在其他函数或块内使用这个变量。例如:

有关局部变量的说明如下:

(1)main函数本身也是一个函数,因而在其内部声明的变量仍为局部变量,只能在main函数内部使用,而不能在其他函数中使用。

(2)在不同的函数中可声明具有相同变量名的局部变量,系统会自动进行识别。

(3)形参也是局部变量,其作用域在定义它的函数内。所以形参和该函数体内的变量是不能重名的。

3.全局变量

作用域在程序级或文件级的变量称为全局变量,也就是说,全局变量是在函数外部定义和访问的。全局变量的作用域是从定义该变量的语句位置开始,直至本文件结束。因而全局变量声明后可以被很多函数使用。例如:(www.chuimin.cn)

有关全局变量的说明如下:

(1)全局变量的作用域是从声明该变量的位置开始直到程序结束处。因此,在一个函数内部,可以使用在此函数前定义的全局变量,而不能使用在该函数定义后定义的全局变量。例如上面的例子,main函数和函数f2可以使用全局变量a、b、x、y,而在函数f1内只能使用全局变量x,y。

如果想在定义全局变量的前面使用该变量,而不需要重新定义,就必须使用extern关键字对其加以声明。这种全局变量称为“外部变量”。例如,在以下程序中,虽然全局变量a,b的声明在程序的结尾,但由于被声明为外部变量,因此其作用域应为整个程序:

(2)全局变量的作用域为函数间传递数据提供了一种新的方法。如果在一个程序中,各个函数都要对同一个变量进行处理,就可以将这个变量定义成全局变量。采用这种方式,可以从某个函数内部得到多个计算值。

(3)在一个函数内部,如果一个局部变量和一个全局变量重名,则在局部变量的作用域内,全局变量不起作用。例如:

上述程序的输出结果为8,因为main函数中的局部变量a屏蔽了全局变量a。

4.变量的存储类别

变量的存储类别有两种:auto(动态)和static(静态)。其使用说明如下:

(1)全局变量默认的存储类别为static,一旦定义后就分配存储空间,直到程序运行结束才释放其存储空间。

(2)局部变量默认的存储类别为auto,在遇到其定义后就分配存储空间,一旦退出其有效范围后就释放其存储空间。例如:

程序执行结果为:3,3。两次调用fun的结果是相同的,因为每次调用fun都会重新为局部变量a分配存储空间,当函数执行完毕,都会释放a的空间。

(3)可以用static将局部变量的存储类别指定为static。这样局部static变量在经过不同函数调用之后,也可以保留它们原来的值。例如:

程序执行结果为:3,4。两次调用fun的结果是不相同的,第1次调用fun,为static局部变量a分配存储空间,并置初值2;第2次调用函数fun,原来的a仍是有效的,不会再初始化为2,所以第2次调用fun返回4。static局部变量在整个程序结束才会释放其存储空间。