2.2 变量

本篇学习变量的定义、初始化、声明与定义区别,并能写出作用清晰、生命周期明确的变量代码。

变量

概念说明

变量是程序运行过程中可读可写的一块存储区域。 在 C 语言里,变量一旦绑定了类型,编译器就会按这个类型分配空间,并按对应规则解释其中的二进制数据。

学变量时最重要的几个区分是:

  • 定义声明 不是同一回事。
  • 局部变量全局变量 的默认初始化规则不同。
  • 作用域 解决的是“哪里能看到这个名字”,生命周期 解决的是“这块对象活多久”。

变量命名虽然是语法上最自由的一部分,但它对代码可读性的影响非常大。 一个叫 user_count 的变量,和一个叫 a1 的变量,后期维护成本会完全不同。

语法/规则

  1. 变量定义的一般形式是 类型 变量名;类型 变量名 = 初始值;
  2. 同类型变量可以并列定义,例如 int x = 1, y = 2;,但复杂场景下分开写通常更清晰。
  3. extern 常用于只声明、不在当前位置分配存储空间,真正的定义通常在别处。
  4. 全局变量和静态变量如果没有显式初始化,通常会被初始化为 0;局部非静态变量不会自动初始化。
  5. 建议变量在第一次使用前就完成初始化,减少未初始化读的问题。
  6. 变量名应尽量表达含义,例如 total_scorefile_count,而不是泛泛的 atmp
  7. 当变量只在很小的范围内有意义时,尽量把它定义在靠近使用位置的地方。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>

int total = 0;

int main(void) {
    int age = 18;
    int level = 1;

    total = age + level;

    printf("age = %d\n", age);
    printf("level = %d\n", level);
    printf("total = %d\n", total);
    return 0;
}

输出结果:

1
2
3
age = 18
level = 1
total = 19

这个例子里,total 是文件作用域变量,agelevelmain 函数内部的局部变量。 它们的可见范围和生命周期都不一样。

常见错误

  1. 使用局部变量前没有初始化,却直接参与计算或输出。
  2. 以为 extern int count; 已经创建了变量,实际上它通常只是声明。
  3. 同一个全局变量在多个源文件里重复定义,最终引发链接错误。
  4. 变量命名过于随意,到处复用 ab1tmp2 这类无语义名字,后面阅读和调试会很痛苦。
  5. 把变量定义得过早或过宽,导致本来只在小范围使用的数据泄漏到更大作用域里。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字