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;局部变量值随机。
相关推荐
clint4564 天前
C++进阶(1)——前景提要
c++
夜悊4 天前
C++代码示例:进制数简单生成工具
c++
郝学胜_神的一滴4 天前
CMake 021: IF 条件判据详诠
c++·cmake
_wyt0015 天前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
LDR0065 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术5 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园5 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob5 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享5 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.5 天前
C语言--day30
c语言·开发语言