C++语言-6-变量和语句的作用域

本章学习作用域相关知识。


采用以下程序段进行说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
int x=1;
int main()
{
int a=1;
while(a<10)
{
int b=3;
a++;
while(b<5)
{
int c=2;
if(c>=4) break;
b++;
c+=b;
}
}
return 0;
}

先说明一下,a++的效果等于a+=1等于a=a+1,不过a++的执行速度比a=a+1快就是了。同理c+=b是等于c=c+b的。

我们可以看到,在本程序段中有4个变量,分别是x,a,b,c,定义的位置各不相同,甚至x是定义在int main()之外的。这是什么意思呢?

原来,变量不是定义了之后就通用的,而是有所属范围的。

定义在int main外的,不属于任何函数的x,是可以在本程序所有函数中调用的。它定义的位置叫做公共域。而定义在int main里的a,是属于main而不是公共域的。它在main结束时就会清空,不能再访问。也就是说,x可以在程序的任何函数中被访问和修改,而a只能在main里被访问和修改。

但是b,c去哪了?我们可以看到,在进入第1个while之后,b才被定义,而c更是定义在第2个while里,且这两个while都属于main,第2个while又属于第1个while。

所以,变量b只能在第1个while中被访问和修改,变量c只能在第2个while中被修改。

又因为第2个while属于第1个while,所以它能访问和修改变量b,而两个while都属于main,所以能访问和修改变量a。但反过来,不在第1个while里的话,main和其它定义在公共域的函数是不能访问和修改变量b的。同理,不是在第2个while里的话,即使是第1个while里的其它语句,也不能访问和修改变量c。

至此,我们能得到一个上下级关系:

1
2
3
4
程序本体
——main
————while
——————while

下级可以访问和修改上级中已经定义的变量,而上级不可以访问和修改定义在下级中的变量。

根据这套理论,你能猜到第2个while里的break作用范围有多大了吗?就是只能跳出第2个while而已,对第1个while半毛钱影响都没有。continue也是一样的。

但是return 0不能乱写,这是特例,所有int类型的函数,比如main,在碰到return 0时会直接结束这个函数自身,跳过下面的所有语句。基于这个特性,也可以用return 0来当程序断点,用来检测当编译成功却运行时错误时哪些语句有问题。

当然,不止是return 0,事实上自定义函数和main,碰到return时,不管return是什么都会结束函数。只不过main要求一定要return 0罢了。

第六章到此结束。

--It's the end.Thanks for your read.--