| 特性 | 局部变量 | 全局变量 |
|---------------|--------------------------|--------------------------|
| 存储位置| 栈(stack) | 数据段(data segment) |
| 初始化| 不自动初始化(随机值) | 自动初始化为0/NULL |
| 生命周期| 函数调用期间 | 整个程序运行期 |
| 访问速度| 更快(CPU缓存友好) | 相对较慢 |一个关键细节 :当局部变量与全局变量同名时 ,变量变建议遵循"最小作用域原则",全局本质区别 :作用域与可见性
局部变量
(Local Variables):
- 定义在函数或代码块内部(如{}内)
- 仅在定义它的局部文明重启蓝卡怎么获得函数/块中可见
- 每次函数调用时重新创建
- 典型示例 :
c void func() { int x = 10; // 局部变量 printf("%d", x); }全局变量
(Global Variables) :
- 定义在所有函数之外(通常位于文件顶部)
- 从定义点到文件末尾均可见
- 程序启动即创建,微信域名防封跳转、变量变工程实践中的全局文明重启root检测选择策略
:如循环计数器
c for(int i=0; i<10; i++) { // i为理想局部变量 //... } 递归函数参数:每次调用需要独立副本 线程安全需求:避免多线程竞争条件:需多处访问的常量
c const MAX_USERS = 1000; // 全局常量更合适 共享状态管理 :如硬件寄存器映射 性能关键路径 :减少参数传递开销static关键字可以改变变量的默认特性:
c void counter() { static int count = 0; // 局部静态变量 count++; }
- 具有局部作用域但拥有全局生命周期
- 仅初始化一次(程序首次执行到定义处)推荐替代方案
:c
char globalBuffer[100]; // 方案1:全局变量char *getBuffer() {
char *heap = malloc(100); // 方案2 :堆内存
return heap;
}总结:理解变量作用域是全局成为成熟C开发者的必经之路。并配合static实现更精细的局部控制。在保证功能的变量变前提下尽可能使用局部变量,局部变量会遮蔽(shadow)
全局变量