变量
概念说明
变量是程序运行过程中可读可写的一块存储区域。 在 C 语言里,变量一旦绑定了类型,编译器就会按这个类型分配空间,并按对应规则解释其中的二进制数据。
学变量时最重要的几个区分是:
定义和声明不是同一回事。局部变量和全局变量的默认初始化规则不同。作用域解决的是“哪里能看到这个名字”,生命周期解决的是“这块对象活多久”。
变量命名虽然是语法上最自由的一部分,但它对代码可读性的影响非常大。
一个叫 user_count 的变量,和一个叫 a1 的变量,后期维护成本会完全不同。
语法/规则
- 变量定义的一般形式是
类型 变量名;或类型 变量名 = 初始值;。 - 同类型变量可以并列定义,例如
int x = 1, y = 2;,但复杂场景下分开写通常更清晰。 extern常用于只声明、不在当前位置分配存储空间,真正的定义通常在别处。- 全局变量和静态变量如果没有显式初始化,通常会被初始化为 0;局部非静态变量不会自动初始化。
- 建议变量在第一次使用前就完成初始化,减少未初始化读的问题。
- 变量名应尽量表达含义,例如
total_score、file_count,而不是泛泛的a、tmp。 - 当变量只在很小的范围内有意义时,尽量把它定义在靠近使用位置的地方。
示例
| |
输出结果:
| |
这个例子里,total 是文件作用域变量,age 和 level 是 main 函数内部的局部变量。
它们的可见范围和生命周期都不一样。
常见错误
- 使用局部变量前没有初始化,却直接参与计算或输出。
- 以为
extern int count;已经创建了变量,实际上它通常只是声明。 - 同一个全局变量在多个源文件里重复定义,最终引发链接错误。
- 变量命名过于随意,到处复用
a、b1、tmp2这类无语义名字,后面阅读和调试会很痛苦。 - 把变量定义得过早或过宽,导致本来只在小范围使用的数据泄漏到更大作用域里。