楼上解释的都很到位,我就不多做解释
我这里是MJ老师讲解,我补充做的笔记,你看看注释,这个代码你完全懂了,作用域就不是问题了
- /*
- 1.代码块的作用:手机内存有限,为了提高手机内存的及时释放,为了提升性能。
- 2.变量的作用域:从定义变量的哪一行代码开始,一直到所在的代码块结束
- */
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- /*{
- int a = 10;//这里的代码块只能在这个{}中有效使用,其作用域是不能逃出此{}
- }//这个}执行代表这块{}函数执行完毕,将在内存中被释放消失
- printf("a = %d",a);//所以这里的printf函数不能使用变量a
- */
- int score = 100;
-
- {
- int score = 200;
- {
- int score = 50;//这样函数输出结果score =200 ,score = 100
- /* score = 50;//这将score赋值改变为50,这样函数输出是score = 50 ,原因是这里的socre没有定义,需要到外面找定义的代码进行修改使用。score =100 */
- }
- printf("score = %d",score);//这里能调用外面的score变量(注释此代码块中的int score做实验),但是因为代码块存在,所以这里的printf输出采取就近原则,而不是给score赋值两次,(如果赋值两次,那么第二个printf输出也是200,但结果是100,充分证明了代码块中的就近原则)
- }
-
- printf("score = %d",score);
- return 0;
- }
复制代码
作用域也就是内存分析的问题,学习C弄清楚内存分析是关键。老师画得图你也要画出来和文档存在一起。
加油! |