• 【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修饰的局部变量

  • 相关阅读:
    基于ABP的AppUser对象扩展
    Android使用Chrome浏览器进行抓包
    开箱评测:双十一刚买的云服务器,到底好不好用?
    iOS安全加固方法及实现
    Labview 前面板放置照片
    双目视觉的成像理论
    自己动手从零写桌面操作系统GrapeOS系列教程——17.用汇编语言清空屏幕
    pytorch 中 nn.Conv2d 解释
    关于conda、虚拟环境、镜像通道、pip、pycharm解释器配置的一些总结
    Servlet
  • 原文地址:https://blog.csdn.net/weixin_50964793/article/details/127831786