作用域说的是不是不对,内部的变量是重新定义的,而不是覆盖外部的变量?

来源:3-15 作用域

MLeo

2018-06-20 14:09:50

    int a = 1;

    @autoreleasepool {

        float a  = 1;

        NSLog(@"%f",a);

    }


写回答

3回答

axiba

2018-06-24

http://img.mukewang.com/climg/5b2f6be4000195bc03580173.jpg

输出结果:1;

希望能解答你的疑惑

0

MLeo

提问者

2018-06-21

http://img.mukewang.com/climg/5b2b078f00019c1904550620.jpg


调试时看到两个相同类型的变量a,这个怎么说?

就好比子类和父类一样,子类重写了父类的属性,括号内是访问的子类的属性,而括号外访问的是父类的属性,并不是覆盖(重点)

0

imoocLovers

2018-06-20

①当我们在函数中或者代码块中定义的变量跟外部变量一样时,那么在函数或代码块中的变量是会将外部的变量给覆盖掉,只能使用函数中变量的值。

②在你的代码中,@autoreleasepool 中定义了一个float a  = 1;虽然变量名也是a,因为作用域不同,所以在@autoreleasepool 中使用的是float a  = 1;这个a的值。在这里实际上定义的是两个不同类型的变量。

③而在老师讲解的作用域中,是在@autoreleasepool大括号中又定义了一个int a ,与外部的变量是一样的,这个时候在内部使用的a的值将会覆盖掉外部的a的值。

0
hmoocLovers
回复
hLeo
h @autoreleasepool 中声明的变量a和b的作用域出了大括号就被释放了,而一开始定义的变量int a = 5;//声明变量a; 它的作用域是出了main方法的大括号才会被释放,所以在autoreleasepool的外部使用的变量a就是一开始那个变量a的值,而这个时候变量b已经不存在了,那么就访问不到了。
h018-06-20
共2条回复

0 学习 · 1878 问题

查看课程