本章学习作用域相关知识。
采用以下程序段进行说明:
1 |
|
先说明一下,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个while里的break作用范围有多大了吗?就是只能跳出第2个while而已,对第1个while半毛钱影响都没有。continue也是一样的。
但是return 0不能乱写,这是特例,所有int类型的函数,比如main,在碰到return 0时会直接结束这个函数自身,跳过下面的所有语句。基于这个特性,也可以用return 0来当程序断点,用来检测当编译成功却运行时错误时哪些语句有问题。
当然,不止是return 0,事实上自定义函数和main,碰到return时,不管return是什么都会结束函数。只不过main要求一定要return 0罢了。
第六章到此结束。