• 【C语言】关键字const、static、extern、register、volatile、auto的作用


    关键字const、static、extern、register、volatile、auto的作用

    一、const

    1. const修饰一般变量时(以整型变量为例):表示定义一个只读变量,即为常变量(定义常变量时要初始化,没有初始化则为随机值)。
      const int a = 10;
    2. const修饰指针变量时:
      (1) 常量指针,指针指向的值不可以改变,指针的指向可以改变。
      const int *p;
      int const *p;
      (2)指针常量,指针指向的值可以改变,指针的指向不可以改变。
      int * const p;
      (3)常量指针常量,指针指向的值和指针的指向都不可以改变。
      const int * const p;
    3. const常用在修饰函数的参数,可以防止传过去的值被不小心修改。

    总结:
    const的作用是防止参数被修改,可以理解为“只读”属性

    二、static

    1. static修饰局部变量时:
      (1)改变了其存储位置,存储在静态区;
      (2)改变了其生命周期,为整个源程序,因此它只被初始化一次,若没初始化则自动初始化为0。
    2. static修饰全局变量时:改变了其作用域,只可以被本文件内的函数访问。
    3. static修饰函数时:改变了其作用域,只可被这本文件内的其它函数调用。

    总结:
    延长局部变量的生命周期。
    限制全局变量和函数的作用域。

    三、extern

    1. 作用:用于跨文件引用全局变量和函数,即在本文件中引用一个已经在其他文件中定义的全局变量和函数(函数一般不常用)。
    2. 注意:
      (1)引用时不能初始化,如extern int var,而不能是extern int var = 0。
      (2)函数默认是extern类型的(具有外链属性),表明是整个工程文件可见的。

    四、register

    1. 作用:编译器会将register修饰的变量尽可能地放在CPU的寄存器中,以加快其存取速度,一般用于频繁使用的变量。
    2. 注意:
      (1)register变量可能不存放在内存中,所以不能用&来获取该变量的地址。
      (2)只有局部变量和形参可以作为register变量。
      (3)寄存器数量有限,不能定义过多register变量。

    五、volatile

    1. 作用:防止编译器优化,要求每次读取数据,必须在内存上取,而不是使用保存在寄存器或者cache里的备份。

    2. 例子:
      (1)并行设备的硬件寄存器(如:状态寄存器)。
      (2)一个中断服务子程序中会访问到的非自动变量。
      (3)多线程应用中被几个线程共享的变量(防止死锁)。

      详细解读: link

    六、auto

    声明的变量是一个自动类型的变量。
    局部变量不写存储类型默认的就是 auto。

    非自动类型的变量:
    1.全局变量
    2.static修饰的局部变量

  • 相关阅读:
    B树、B+树详解
    arm-2d是个啥?初体验!
    Django面对高并发现象时处理方法
    ubuntu安装Qv2ray2.7.0及配置
    号外: 我开通了英语专栏
    bulkTransfer发送数据丢包
    SpringCloud总结
    关键词搜索1688商品数据接口(标题|主图|SKU|价格|优惠价|掌柜昵称|店铺链接|店铺所在地)
    【校招VIP】测试方案之测试需求分析
    Vue.js 中的异步组件是什么?
  • 原文地址:https://blog.csdn.net/weixin_50964793/article/details/127831786