C 语言学习笔记(二)存储类型介绍

本文介绍了C语言的5种存储类别,包括自动变量、寄存器变量、块作用域的静态变量、外部链接的静态变量和内部链接的静态变量,还提及多文件使用外部变量的声明方法。此外,阐述了存储类别说明符、存储类别和函数的关系,以及动态内存分配和const、volatile、restrict类型限定符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言5种存储类别

存储类别声明方式存储期作用域链接
自动块内自动
寄存器块内,使用关键字 register自动
静态外部链接所有函数外静态存储文件 外部
静态内部链接所有函数外,使用关键字 static静态存储文件内部
静态无链接块内,使用关键字 static静态存储
  1. 自动变量
    ***块作用域和无链接意味着只有在变量定义所在的块中才能通过变量名访问该变量。
    ***变量具有自动存储期意味着,程序在进入该变量声明所在的块时变量存在,程序在退出该块时变量消失。
  2. 寄存器变量
    寄存器变量储存在 CPU 的寄存器中,或者概况地说,储存在最快的可用内存中访问和处理变量速度更快。
  3. 块作用域的静态变量
    静态变量是指该变量在内存中原地不动,并不是说它的值不变。
  4. 外部链接的静态变量(external variable)
    通过用关键字 extern 再次声明,指出使用了外部变量。
    外部变量只能初始化一次,且必须在定义该变量时进行。
  5. 内部链接的静态变量
    在所有函数外部,用存储类别说明符 static 定义的变量为静态变量。
    内部链接的静态变量只能用于统一个文件中的函数。可以使用 extren 在函数中重复声明任何具有文件作用域的变量。
  6. 多文件
    如果外部变量定义在一个文件中,那么其他文件在使用该变量之前必须先声明它(使用 extern 关键字)。
  7. 存储类别说明符
    C语言有6个关键字作为存储类别说明符:auto、register、static、extern、_Thread_local、typedef.
    typedef 关键字与任何内存存储无关。
    auto:表明变量是自动存储期,只能用于块作用域的变量声明中。使用 auto 主要是为了明确表达要使用与外部变量同名的局部变量的意图。
    register:只用于块作用域的变量,它把变量归为寄存器存储类别,请求最快速度访问该变量。同时,确保该变量地址不被获取.
    static: 创建的变量具有静态存储期,载入程序时创建对象,当程序结束时对象消失。
    extern: 表明声明的变量定义在别处。
  8. 存储类别和函数
    包括外部函数(默认)或静态函数(用 static 标识)
  9. 分配内存:malloc()和 free()、calloc()
    动态申请内存malloc(20*sizeof(int))、calloc(20, sizeof(int)) ,free()函数释放 malloc 和 calloc函数申请的内存空间,不及时释放内存会造成内存泄露。不能释放同一内存两次。
  10. const 类型限定符
    以关键字 const 声明的对象,其值不可修改。
    const float *pf; pf 指向一个 float 类型的 const值。 创建 pf指向的值不能被改变,而 pt 本身的值可以改变。
    float *const pt; pt 是一个const 指针,创建的指针 pt 本身的值不能更改。
    const float *const ptr;表明 ptr 既不能指向别处,它所指向的值也不能改变。
  11. volatile类型限定符
    volatile限定符告知计算机,代理(而不是变量所在的程序)可以改变该变量的值。
  12. restrict 类型限定符
    restrict 关键字编译器优化某部分代码已更好地支持计算。它只能用于指针,表明该指针是访问数据对象的唯一且初始的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值