全局变量
全局变量在函数外部定义,作用域从定义位置开始到文件结束。全局变量存储在全局数据区,生命周期贯穿整个程序运行期间。未初始化的全局变量默认值为0。全局变量可以被同一文件的其他函数访问,通过extern声明也可被其他文件访问。
cpp
int globalVar; // 全局变量,默认初始化为0
void func() {
globalVar = 10; // 可访问
}
局部变量
局部变量在函数或代码块内部定义,作用域仅限于定义它的函数或代码块。局部变量存储在栈区,生命周期随函数调用开始和结束。未初始化的局部变量值是随机的。局部变量不能被其他函数直接访问。
cpp
void func() {
int localVar; // 局部变量,值随机
localVar = 5;
}
静态全局变量
静态全局变量在函数外部定义且用static修饰,作用域仅限于定义它的文件。静态全局变量存储在全局数据区,生命周期贯穿整个程序运行期间。未初始化的静态全局变量默认值为0。静态全局变量不能被其他文件访问,避免了命名冲突。
cpp
static int staticGlobalVar; // 静态全局变量
void func() {
staticGlobalVar = 20; // 仅本文件可访问
}
静态局部变量
静态局部变量在函数内部定义且用static修饰,作用域仅限于定义它的函数。静态局部变量存储在全局数据区,生命周期贯穿整个程序运行期间,但只能在函数内访问。未初始化的静态局部变量默认值为0。函数多次调用时,静态局部变量会保持上一次的值。
cpp
void func() {
static int staticLocalVar = 0; // 静态局部变量
staticLocalVar++;
cout << staticLocalVar << endl;
}
关键区别总结

- 作用域 :全局变量跨文件(需
extern),静态全局变量仅限文件;局部变量限函数/代码块,静态局部变量限函数但保持值。 - 存储区域:全局、静态全局和静态局部变量在全局数据区;局部变量在栈区。
- 生命周期:全局、静态全局和静态局部变量为整个程序运行期;局部变量随函数调用结束。
- 初始化:未初始化的全局、静态全局和静态局部变量默认为0;局部变量值随机。