• const、static、extern三个关键字


    默认情况下,C语言的全局变量是全世界都可以访问的,也就是全局变量可以跨文件访问。

    extern可以引用全局变量

    例如,如果有一个全局变量int money = 100;
    extern int money 意为:引用这个全局变量,而非定义一个全局变量

    注意:不允许出现两个变量名一样的全局变量
       函数和变量一样,都可以被全局引用


    static的作用:
    static 修饰的全局变量作用域仅限于当前文件 所以被static修饰的全局变量不能被引用
    static修饰的局部变量只会初始化一次,在整个程序运行过程中始终存在


     const : const只修饰它右边的内容,被const修饰的内容都是常量、都是不能再修改的

    int * const p1; p1是常量 *p1是变量

    int const * p1;  *p1是常量 p1是变量
    const  int *p1;

    const int *const p1; p1和 *p1都是常量
    int const * const p1;

    const int age = 20;
    int *p = &age;
    *p = 30;  不行


     static :
     1> 被static修饰的全局变量常量
        1) 仅限于当前文件访问
        2) 改变了作用域
     2> 被static修饰的局部变量
        1) 只会占用一块内存,在整个程序运行过程都不会销毁,只会初始化一次
        2) 改变了生命周期,并没有改变作用域
     
     extern : 可以引用一个全局变量常量
    默认全局变量如果没有用static修饰,全部是可被extern的(即全局可访问,但可被访问到的前提是:在其他地方访问这个全局变量必须要加extern修饰符,笔者称之为可被extern)

    比如:我在A.m文件中声明并定义了一个全局变量BOOL isSelected = NO;如下图:

    我如果在B.m文件中声明同名的变量BOOL isSelected = NO;会报错,截图如下:

    解决这个问题的办法有两种:

    第一种:A.m文件中的全局变量声明为static的,代表只能在当前文件访问(当前文件可见):static BOOL isSelected = NO;

    第二种:B.m文件中用extern引用A.m文件中申明定义的这个全局变量:引用方式:extern BOOL isSelected;如下图:

    采用第二种方式:代表B.m文件和A.m文件使用的是同一个BOOL类型的变量!!!如果A.m文件把isSelected 改为YES,那么B.m文件使用这个isSelected时需要注意了,此时isSelected也是YES!!!

    注意:

    1. 上面extern BOOL isSelected;这句代码不是声明变量,而是引用变量。

    2. 一般情况下,如果其他文件中不会访问本文件中的全局变量,那么建议用static关键字进行修饰,例如:static BOOL isSelected = NO;

  • 相关阅读:
    PHP遍历数组元素
    In PHP5, what is the difference between using self and $this? When is each appropriate?
    了解如何构建 Metro 样式的应用程序
    HTML5在路上
    meta 之 viewport
    dede数据库连接文件
    windows 环境安装wamp软件实现php开发环境
    域名空间那些事
    Javascript编程风格
    apache 服务器修改网站默认首页
  • 原文地址:https://www.cnblogs.com/wsnb/p/4787790.html
Copyright © 2020-2023  润新知