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;局部变量值随机。
相关推荐
2401_873479403 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope3 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python3 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
浪浪小洋4 小时前
c++ qt课设定制
开发语言·c++
charlie1145141914 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
handler015 小时前
Linux: 基本指令知识点(2)
linux·服务器·c语言·c++·笔记·学习
故事和你915 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
程序猿编码5 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
aq55356006 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
aq55356006 小时前
PHP vs Python:30秒看懂核心区别
开发语言·python·php