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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章关键字...................................................................................................................................9 1.1,最宽恒大量的关键字----auto..........................................................................................11 1.2,最快的关键字---- register............................................................................................... 11 1.2.1,皇帝身边的小太监----寄存器............................................................................. 11 1.2.2,使用register 修饰符的注意点.............................................................................11 1.3,最名不符实的关键字----static........................................................................................12 1.3.1,修饰变量...............................................................................................................12 1.3.2,修饰函数...............................................................................................................13 1.4,基本数据类型----short、int、long、char、float、double........................................... 13 1.4.1,数据类型与“模子”............................................................................................... 14 1.4.2,变量的命名规则...................................................................................................14 1.5,最冤枉的关键字----sizeof...............................................................................................18 1.5.1,常年被人误认为函数...........................................................................................18 1.5.2,sizeof(int)*p 表示什么意思?........................................................................18 1.4,signed、unsigned 关键字................................................................................................19 1.6,if、else 组合.................................................................................................................... 20 1.6.1,bool 变量与“零值”进行比较...............................................................................20 1.6.2, float 变量与“零值”进行比较.................................................................................21 1.6.3,指针变量与“零值”进行比较...............................................................................21 1.6.4,else 到底与哪个if 配对呢?...............................................................................22 1.6.5,if 语句后面的分号............................................................................................... 23 1.6.6,使用if 语句的其他注意事项.............................................................................. 24 1.7,switch、case 组合........................................................................................................... 24 1.7.1,不要拿青龙偃月刀去削苹果.............................................................................. 24 1.7.2,case 关键字后面的值有什么要求吗?.............................................................. 25 1.7.3,case 语句的排列顺序...........................................................................................25 1.7.4,使用case 语句的其他注意事项..........................................................................27 1.8,do、while、for 关键字................................................................................................... 28 1.8.1,break 与continue 的区别.....................................................................................28 1.8.2,循环语句的注意点...............................................................................................29 1.9,goto 关键字......................................................................................................................30 1.10,void 关键字....................................................................................................................31 1.10.1,void a?............................................................................................................31 1.10,return 关键字................................................................................................................. 34 1.11,const 关键字也许该被替换为readolny....................................................................... 34 1.11.2,节省空间,避免不必要的内存分配,同时提高效率.................................... 35 1.12,最易变的关键字----volatile.......................................................................................... 36 1.13,最会带帽子的关键字----extern.................................................................................... 37 1.14,struct 关键字..................................................................................................................38 1.14.1,空结构体多大?.................................................................................................38 1.14.2,柔性数组.............................................................................................................39 1.14.3,struct 与class 的区别.........................................................................................40 1.15,union 关键字..................................................................................................................40

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值