C/C++变量的作用域
程序描述:该程序的功能是根据变量定义位置的不同,调用不同作用域中的变量。
【源程序1-16】
01 #include
02 using namespace std;
03 int temp=5;
04
05 int main()
06 {
07 int temp=6;
08 cout<<"Local temp:"<
09 cout<<"Overall temp:"<<::temp<
10 if(temp>0)
11 {
12 temp=10;
13 cout<<"Outer temp:"<
14 if(temp==10)
15 {
16 temp=0;
17 cout<<"Lining temp:"<
18 }
19 }
20 return 0;
21 }
程序说明:
(1) 第3 行和第7 行分别定义了同名的变量temp。第3 行的temp 定义在函数体的外部,属于全局变量;第7 行的temp 定义在main 函数内,其有效范围限定在main 内。
(2) 如果局部变量和全局变量同名,在函数体内,以局部变量为主,因此,第8 行的输出结果为Local temp:6。第9 行temp 的前面附加了作用域消解符“::”,因此,该处调用全局变量temp,输出结果为Overall temp:5。
(3) 同理,第10~17 行的temp 均针对局部变量进行操作。因此,第13 行第17 行两行的输出结果分别为
Outer temp:10
Lining temp:0
知识点:
C++的标识符(即变量)作用域有3 种:全局、局部和文件。所谓作用域就是标识符在程序中的可见性,或者说在程序中的哪个地方可以使用,可以让它发挥作用。
(1) 全局作用域。当变量是在所有函数的外部声明的,称其为外部变量,它具有全局作用域(即可以在程序的任何地方访问它)。全局作用域的变量/函数可以在独立编译的代码模块中使用,前提是要在使用它的模块中用extern 关键字对其进行声明。
(2) 局部作用域:在函数内部或者在某一模块内声明,不能被其他函数模块访问的变量,以及函数的形参都具有局部作用域。C++支持在不同作用域中使用同名标识符,但是在同一函数内,如果使用同名标识符,具有内层作用域的标识符会覆盖外层作用域的标识符。当一个局部变量和一个全局变量同名时,所有对变量名的引用都会指向局部变量,此时,如果使用全局变量,就要用作用域消解符“::”来限定变量(即通知编译器)。
(3) 文件作用域。标识符只在声明它的文件内可见,外部不可见,即不能使用extern 在其他文件中声明它们。