美文网首页
关键字const,static,extern

关键字const,static,extern

作者: yyggzc521 | 来源:发表于2018-11-16 12:52 被阅读0次

    ----------------------const--------------------

    说起const就想起宏,其实const和宏是有很大区别的,两者的使用还要看具体的应用场景。另外Apple不推荐使用宏,这一点从工程创建就能看出来,之前创建完工程后自带pch文件,后来改为了手动创建pch。

    区别:

    编译时刻:const是编译阶段,宏是预编译(编译之前处理)。
    编译检查:const会编译检查,报编译错误,宏不做检查;不会编译报错,只是简单的替换。
    宏的好处:宏能定义一些函数、方法。 const不能。
    宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换。

    作用:

    const修饰变量主要强调变量是不可修改的

    //str是指针,*str是指针指向的内存里的值,const 修饰*str就是指针指向的内存里的值不能变,str这个指针可以改变,即可以指向别的地方
        NSString const *str = @"faesfeg";
        str = @"可以指向别的地方";
    
    //这里str是指针,* str是指针指向的内存里面的值,const修饰str,代表内存地址不能改变
       NSString * const str = @"efwferg";
        str = @"这里修改会报错";
    
    屏幕快照 2018-11-16 上午11.13.56.png
        int c = 15;
        int *p = &c;
        *p = 20;
        
        /**
         *这段代码的意思
         *在栈区分配一块内存区域,这块内存区域的名字叫c,里面存放着int类型的数据 值为15
         *声明一个指针指向名称为c的这块内存区域
         *将名称为c的这块内存区域的值改为20
         */
    
    // 这两种写法是一样的,const只修饰右边的基本变量b
        const int b = 20; // b:只读变量
        int const b = 20; // b:只读变量
    
    ----------------------------------------------------------------------------------------------------------------------------------
       const int c = 15;
        int *p = &c;
        *p = 20;
        
        /**
         *这段代码的意思
         *在栈区分配一块内存区域,这块内存区域的名字叫c,里面存放着int类型的数据 值为15;由于c使用const修饰,代表这块内存区域的值不能改
         *声明一个指针指向名称为c的这块内存区域,但是这里面会出现⚠️警告,提示不能修改
         *将名称为c的这块内存区域的值改为20
         *
         */
    
    屏幕快照 2018-11-16 上午11.37.13.png

    ----------------------static--------------------

    static分两种情况,修饰局部变量和全局变量

    修饰局部变量

    一般局部变量是存储在栈区的,它的生命周期是整个代码块,作用域也是整个代码块,一旦出了这个代码块,存储局部变量的这个栈内存就会被回收,局部变量也就被销毁了。
    当用static修饰局部变量,被称为静态局部变量。静态局部变量、全局变量、静态全局变量这三者是存储在静态存储区的。
    存储在静态存储区的变量直到程序结束才会销毁。也就是说,静态局部变量的生命周期是整个源程序。
    但是此时它只是声明在代码块内,所以它的作用域是声明它的代码块。

    作用:延长了局部变量的生命周期,为整个源程序

    static修饰全局变量

    一般当全局变量存储在静态存储区,直到程序结束才销毁。我们可以使用extern关键字来引用这个全局变量。
    当全局变量使用static修饰时,其生命周期没有变,依旧是在程序结束时才销毁。但是其作用域变了,以前是整个源程序,现在只限于声明它的这个文件才可见,即使用extern引用也不行。

    作用:改变了作用域,仅限于声明它的类文件内

    ----------------------extern--------------------

    extern主要是用来引用全局变量,它的原理就是先在本文件中查找,本文件中查找不到再到其他文件中查找。
    常把extern和const联合使用在项目中创建一个文件,这个文件文件中包含整个项目中都能访问的全局常量。
    比如我们在项目中创建的这个文件为ZCConst.h,ZCConst.m。


    屏幕快照 2018-11-16 下午12.49.47.png
    屏幕快照 2018-11-16 下午12.50.05.png

    相关文章

      网友评论

          本文标题:关键字const,static,extern

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