C++全局变量、局部变量、静态全局变量、静态局部变量的区别

全局变量

全局变量在函数外部定义,作用域从定义位置开始到文件结束。全局变量存储在全局数据区,生命周期贯穿整个程序运行期间。未初始化的全局变量默认值为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;局部变量值随机。
相关推荐
IsSh9nj6q34 分钟前
Python全栈应用搭建神器magic-dash .新版本介绍
开发语言·python·dash
啦啦啦啦啦zzzz1 小时前
设计模式:建造者模式
c++·设计模式·建造者模式
独隅1 小时前
CLion 在 Linux 上的完整安装与配置使用指南
linux·运维·服务器·c语言·c++·ide
Cachel wood1 小时前
hands-on-modern-rl:动手学强化学习策略梯度reinforce
开发语言·python
wuminyu1 小时前
JUC组件逐层剥离与深度剖析
java·linux·c语言·jvm·c++·算法
蓝斯4971 小时前
一碰即传,重构跨设备文件分享体验
开发语言·python·重构
宁风NF1 小时前
JavaScript:内存、垃圾回收、性能优化
开发语言·前端·javascript·学习·性能优化·es6
ShuiShenHuoLe2 小时前
Go html/template 使用入门
开发语言·golang·html
geovindu2 小时前
java: Gale-Shapley Algorithm
java·开发语言·后端·算法