全局域和局部域

在下面的代码中,请指出不同的域。ix的哪些声明是错误的?为什么?

       上面已经在后面的注释中指出了不同的域。需要注意的一些地方我用蓝色的线画了下。后面有编号。首先看编号为1的,这两个语句是位于全局域中。编号为2的需要注意的地方是func函数的参数所在的域和func函数的函数体的域是一样的。即都是在局部域的层次1中。也就是说函数的参数是属于该函数的函数体的第一个局部域。编号为3的需要注意的地方就是if语句中定义的变量(即在()中定义的变量)所属的域与if语句是同一个域。即在if()括号中定义的变量可以在if{}中使用,也可以在else{}中使用。

 

下面说明哪些ix的声明是不合法的:

(下面语句前的编号是语句在程序中的行号)

1、这样声明的ix是合法的。位于全局域中。

2、这样声明的ix函数是非法的,因为函数名ix在前面已经被使用了。在同一个域中,每一个符号名称都只能代表独一无二的实例。这也就告诉我们在同一个域中,函数的函数名和变量名是不能相同的。必须不一样。

4、这样声明的ix变量是合法的。位于函数func的第一个局部域中。即层次是1

6、这样声明的ix是非法的。因为该ix同样是位于函数func的第一个局部域中。即层次也是1。在func函数的参数列表中我们已经定义了ix,所以再定义ix是非法的。

7、这样声明的ix是合法的,因为该ix是位于函数func的第二个局部域中,即层次是2。

8、这样声明的ix是非法的,因为该ix的域和if()括号是位于同一个域中

11、这样声明的ix是合法的,因为该ix是位于一个if里面的一个语句块中,是函数func的第三个局部域,即层次是3

16、这样声明的ix是非法的,理由和8是一样的。

从上面的分析中,我们可以得出一个结论:

      名字解析期间查找域的顺序是有内向外,所以在外围域中的声明被嵌套域中的同名声明所隐藏。比如说全局域中的ix和局域中的ix是不同的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值