C 变量
变量是数据的命名存储位置。本章介绍变量的声明、定义、初始化、作用域与生命周期。
1. 声明与定义
- 定义(definition):为变量分配存储空间
- 声明(declaration):告诉编译器变量类型与名称
在 C 中,定义也是一种声明;使用 extern 可以只声明不定义:
c
// a.c
int g_count = 0; // 定义
// b.c
extern int g_count; // 声明2. 初始化
c
int a = 10;
int b; b = 20; // 先声明后赋值未初始化的局部变量值是未定义的(不可使用)。
3. 作用域
- 块作用域:在
{}内有效 - 文件作用域:在文件级别声明
- 原型作用域:函数原型中的参数名作用域
4. 存储期
- 自动存储期(auto):进入块时分配,离开块时释放
- 静态存储期(static):程序开始到结束
- 动态存储期:使用
malloc/free管理
5. 链接属性
- 外部链接:可在多个翻译单元访问
- 内部链接:
static限制为当前翻译单元 - 无链接:块内局部变量
6. const 与 volatile
c
const int MAX = 100; // 只读
volatile int flag; // 防止优化忽略变化(如硬件寄存器)7. 示例
c
#include <stdio.h>
static int s_value = 42; // 内部链接,静态存储期
void foo(void) {
int x = 10; // 自动存储期
printf("x=%d, s_value=%d\n", x, s_value);
}
int main(void) {
foo();
return 0;
}8. 小结
正确区分声明/定义、作用域/存储期/链接属性,有助于组织多文件工程与管理变量生命周期。