视频加载失败

C 语言变量与存储类型

1773 字
9 分钟
C 语言变量与存储类型

【一】变量的理解#

  • 定义:变量是指在程序运行期间其数值可以发生变化的数据。
  • 表示方式:变量在程序中用变量名表示,变量名由用户根据其用途任意命名。
  • 命名规则:变量名命名遵从标识符的起名规则。
    • 只能由字母、数字、下划线组成。
    • 开头不能是数字。
    • 不能和系统的关键字重名。
  • 内存概念:在程序运行时,变量占据一定大小的存储空间,其大小由其数据类型来决定,作为某变量的内存空间的首地址,称为变量的地址。

【二】变量的定义#

  • 使用前提:变量在程序中使用时,必须预先说明它们的存储类型和数据类型。
  • 一般形式: <存储类型> <数据类型> <变量名>;
    • <存储类型>:可以是关键词 auto、register、static 和 extern 之一。
    • <数据类型>:可以是前面讲的基本数据类型,也可以是后面要讲的自定义的数据类型。
    • <变量名>:是一个合法的标识符,其前面的32字符有效。
  • 注意事项:在上述变量说明的式子中,<变量名> 之后有一个分号 ;,意味着它是一个语句,该语句通常称为变量的说明语句。
  • 常见基本数据类型: char, short, int, long, long int, long long, float, double, long double。

这张图片是上一份笔记的延续,接着讲解了C语言中变量的另外三种存储类型:auto、register 和 extern。

为了方便你阅读和复习,我同样将图片内容整理成了结构化的笔记:

【三】auto存储类型#

  • 作用域:用 auto 存储类型说明的变量都是局部于某个程序范围内的,只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。
  • 语法特点:C语言中,在函数体的某程序段内说明 auto 存储类型的变量时可以省略关键字 auto。
  • 代码示例:
    auto int k ; //说明一个auto整型的k变量
    int j ; //省略了auto,说明一个auto整型的j变量
    double x; //省略了auto,说明一个auto双精度型的变量

【四】register存储类型#

  • 定义:register 称为寄存器型。

  • 目的:使用 register 关键字说明的变量主要目的是想将所说明的变量放入CPU的寄存器存储空间中,这样可以加快程序的运行速度。

  • 机制:如申请不到就使用一般内存,同 auto。

  • 使用频率:register 在程序中使用较少(现代编译器优化已经很强大,通常不需要手动指定)。

  • 代码示例:

    register int count; // 定义一个存储类型为register的整型变量;
    register float number; // 定义一个存储类型为register的浮点变量;

【五】extern存储类型#

  • 定义:extern 称为外部参照引用型。
  • 目的:使用 extern 说明的变量是想引用在其它文件中函数体外部定义的变量。
  • 作用域:当变量在一个文件中的函数体外定义,所有其他文件中的函数或程序段都可引用这个变量。
  • 用途:一般用于在文件之间传递数据。

这是关于变量基础知识的最后一部分内容,主要讲解了 static(静态)存储类型以及变量的初始化。

基于你上传的图片,我继续为你整理成结构化笔记,并补充了一些初学者容易混淆的关键知识点,希望能帮到你:

【六】static存储类型#

static 为静态存储类型,既可以在函数体内定义,也可以在函数体外定义 static 类型的变量。

  • 在函数体内定义(静态局部变量):
    • 在内存中以固定地址存放。
    • 程序运行时会保持其值。它下次再调用该函数,该变量不再重新定义,还保留上次存入的数值。
    • 💡 补充提示:静态局部变量只初始化一次。即使函数结束,它的内存也不会被回收,下一次调用函数时,它会保留上一次运行结束时的值。
  • 在函数体外定义(静态全局变量):
    • 主要作用是限定变量的作用域,限定文件的作用域在本文件内。
    • 💡 补充提示:普通全局变量可以通过 extern 跨文件引用,但 static 全局变量只能在当前源文件内使用(内部链接),其他文件即使写了 extern 也无法访问,这有助于避免不同文件间的变量命名冲突。

【七】变量的初始化#

  • 一般形式: <存储类型> <数据类型> <变量> = <表达式> ;

  • 概念:变量的初始化是指变量在被定义的同时赋给一个初值。

    int i=0;
    static double w=100.56;
    double result = 1;
    double x = 5, y = x*2 ; // 定义x并赋值为5,定义y并赋值为x*2 (10)
    register int count = 0 ;
    auto double s = 0 ;

这是关于变量基础知识的最后一小部分内容,主要讲解了 常变量(const) 以及它与 符号常量(#define) 的核心区别。这也是C语言中非常经典的考点。

按照惯例,我为你整理了结构化的笔记,并补充了详细的对比表格:

【八】常变量#

  • 概念:C99标准允许使用常变量,方法是在定义变量时,前面加一个关键字 const。

  • 特点:在程序运行期间其值不能改变。

  • 代码示例:

    const int a3 = 3; // 定义一个整型变量,指定其值为3,在程序运行期间其值不能改变。

常变量与符号常量的区别(核心重点)#

图片中给出了 #define 和 const 的对比示例:

#define Pi 3.1415926 // 定义符号常量
const float Pi = 3.1415926 // 定义常变量

虽然两者在程序中都能代表 3.1415926,但在底层机制上有本质区别:

对比维度符号常量 (#define Pi 3.14...)常变量 (const float Pi = 3.14...)
本质预编译指令(宏定义)变量(带只读属性)
处理阶段预编译阶段编译和运行阶段
工作机制简单的字符替换(全置换)分配内存,存入数值
存储单元不分配存储单元(预编译后名字就消失了)要占用存储单元
类型检查无类型,仅仅是文本替换有明确数据类型,编译器会进行安全检查
生命周期预编译后就不存在了存在于程序的运行期间
  • 💡 通俗理解:#define 就像是Word文档里的“查找替换”,在真正编译前,代码里所有的 Pi 都被换成了数字;而 const 是真正在内存里划了一小块地(存储单元),放进了数字,只不过这块地是“只读”的,不允许被修改。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
C 语言变量与存储类型
https://firefly.cuteleaf.cn/posts/language/c/20c语言基础/40变量/
作者
Dream
发布于
2026-09-26
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Dream
Hello, I'm Dream.
公告
欢迎来到我的博客!爱学习爱进步。
分类
标签
最新动态
站点统计
文章
11
分类
1
标签
26
总字数
23,674
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录