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;局部变量值随机。
相关推荐
福大大架构师每日一题2 分钟前
rust 1.99.1 正式更新:聚焦 UEFI、嵌入式、x86_64 FFI 与 macOS 链接体验的三项修复
开发语言·macos·rust
Pin_Qing6 分钟前
缓存能活多久,现在是个要算的参数
java·大数据·开发语言·人工智能·程序人生
小道士写程序7 分钟前
Rust 元组详解:复合类型的基础
开发语言·rust
艾莉丝努力练剑15 分钟前
【AI大模型接入SDK】Trae生成代码介绍
网络·c++·人工智能·学习·架构
小裕哥略帅16 分钟前
行级数据权限控制@DataPermission
java·开发语言
ZoeLandia22 分钟前
React05:useEffect 与副作用
开发语言·前端·react.js·typescript
ManageEngineITSM23 分钟前
ITSM系统如何与企业微信、钉钉、飞书集成?提升工单处理效率的方法
java·大数据·开发语言·钉钉·企业微信·变更管理
Akamai中国27 分钟前
PHP 爆出两大高风险漏洞!Akamai 即时部署防护机制
开发语言·人工智能·云计算·云服务
学逆向的28 分钟前
C 悬空指针
c语言·开发语言·网络安全
syagain_zsx28 分钟前
BRpc 搭建简单 rpc 服务器
服务器·c++·网络协议·rpc·protobuf·库