04 · 常量与存储类
常量定义
const int MAX = 100; // ✅ 推荐:有类型,编译期检查
#define MAX 100 // 宏:纯文本替换,无类型检查
enum { RED, GREEN, BLUE }; // 枚举常量(见 [[13-共用体-位域-枚举-typedef]])
转义字符:\n 换行 · \t 制表 · \\ 反斜杠 · \' 单引号 · \0 空字符(字符串结束标志)
存储类(4 个关键字,面试高频)
| 关键字 | 作用 | 记忆点 |
|---|---|---|
auto |
自动变量(局部变量默认,几乎不写) | 现代 C 里很少显式用 |
static |
① 局部静态:生命周期延续到程序结束(值保留) ② 全局静态:限制为文件作用域 |
一变量两身份 |
register |
建议放寄存器加速(编译器多半忽略) | 已过时 |
extern |
声明变量/函数在别处定义 | 跨文件共享 |
static 的两种身份(一定要分清)
void f(void) {
static int cnt = 0; // 只在第一次初始化,函数多次调用值会累加
cnt++;
printf("%d\n", cnt); // 1, 2, 3 ...
}
static int g = 0; // 文件级静态:其他 .c 文件看不到它(相当于私有)
生命周期与作用域对照
| 存储位置 | 生命周期 | 谁分配 |
|---|---|---|
| 栈(局部变量) | 函数调用期间 | 系统自动 |
| 堆(malloc) | 直到 free | 程序员手动 |
| 全局/静态区 | 整个程序 | 系统,自动初始化为 0 |
| 常量区 | 整个程序 | 只读 |