作用域规则

每个代码块都有自己的命名规则。外层代码块的名字总是有效的,除非内层的代码块对它进行了重新定义。如果内层代码块的名字进行了重新定义,那么在这个内层代码块中,外层代码块的名字被隐藏或屏蔽。代码块可以嵌套多层,其深度取决于系统限制。

#include <stdio.h>

int main()
{
	int a=1,b=2,c=3;
	printf("%3d%3d%3d\n",a,b,c);                /*  1  2  3*/
	{
		int b=4;
		float c=5.0;
		printf("%3d%3d%5.1f\n",a,b,c);          /*  1  4   5.0 */
		a=b;
		{
		 int c;
		 c=b;
		 printf("%3d%3d%3d\n",a,b,c);          /*   4  4  4   */
		}
		printf("%3d%3d%5.1f\n",a,b,c);         /*   4  4  5.0 */


	}
	printf("%3d%3d%3d\n",a,b,c);              /*    4  2  3*/

}

int 变量a是在外层代码块中声明的,并且再也没有被重新声明。因此,它在所有的嵌套代码块中都有效。变量b和c在第一内层代码块中进行了重新定义,因此隐藏了外层的同名变量。在离开这个代码块后,b和c再次表示外层代码块变量,并且它们的值仍然是外层代码块所初始化的值。最内层的代码块对c再次进行了重新定义,因此在这个代码块中,外层的c和次外层的c都被最内层的c所隐藏。


参考书目:A BOOK on C

猜你喜欢

转载自blog.csdn.net/cheng__lu/article/details/78966847