美文网首页
变量的作用域

变量的作用域

作者: youngyunxing | 来源:发表于2016-03-26 19:26 被阅读59次

    1.先讲讲代码块

    • 定义:代码快就是 { ... } ,语言描述就是被大括号括起来的算一个代码块 例如:
      {
          //这是一个代码块,这里定义的变量,在代码块结束后,会被销毁
      }
    
    • 代码块可以嵌套,一个代码块中可以包含多个代码块,子代码块亦可以继续包含代码块
    {
            //父代码块
    
            {
                 //子代码块
            }//执行完这一行后,子代码块结束,里面定义的变量会被释放
    
            //父代码块
    }
    

    2.说说作用域

    • 作用域可以认为是变量的生命周期,从变量定义的那一行代码开始,到所在的代码块结束为变量的作用域
    • 子代码块内的变量优先级比父代码块内的同名变量优先级要高.也就是说,如果父代码块和子代码块内都定义了同名变量,那么子代码块内优先访问子代码块内的变量.

    ** 请看题:**

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
        int score = 100;
        {
            int score  = 200;
            {
                score = 50;
                printf("%d\n",score);//输出 50
            }
            printf("%d\n",score);//输出 50
        }
        printf("%d\n",score);//输出 100
     
        return 0;
    }
    

    原因:
    为了便于讲解
    int score = 100;这个score我们认为是score1
    int score = 200,这个score我们认为是score2

    • score = 50;
      这句话中score对应的是score2,因为这行代码所在代码块没有定义变量score,所以会向它的父代码块查询,然后就找到了score2,然后将score2修改为50
    • 第一次打印
      printf所在的代码块,没有定义score变量,向父代码块查询,查询到 score2,score2已被修改为50;所以输出50;
    • 第二次打印
      printf 所在代码块已经有定义的变量score2,直接输出结果为50,输出完成后,下一行代码块就结束了,因此score2会被释放掉
    • 第三次打印
      printf 所在代码块定义有score1,直接输出100

    作用:

    当然是节约内存了
    例如:

    int main()
    {
        {
            //定义了跟多变量,申请了很多内存
        }
        //这里又用不到上面代码块中的数据,那么就把上面的一堆东西放入一个代码块
    }
    

    全篇完

    相关文章

      网友评论

          本文标题:变量的作用域

          本文链接:https://www.haomeiwen.com/subject/fsbdlttx.html