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是真正在内存里划了一小块地(存储单元),放进了数字,只不过这块地是“只读”的,不允许被修改。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!














