You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数内使用全局变量是否生成本地副本?引用/指针参数定义合理性探讨

关于全局变量在函数中的使用疑问解答

一、函数内使用全局变量时的访问方式

函数内部直接使用全局变量时,不会创建本地副本,而是直接访问全局变量本身。

全局变量在程序启动时就被分配了固定的内存地址(比如单片机RAM的特定区域,或是映射外设的寄存器地址),函数里对它的读写操作都是直接作用于这个内存地址上的数据,和传递参数时在栈上创建临时副本的机制完全不同。

举个简单的C语言示例:

int global_counter = 0; // 全局变量

void increment_counter() {
    global_counter++; // 直接修改全局变量本身
}

int main() {
    increment_counter();
    // 此时global_counter的值为1,而非初始的0
    return 0;
}

二、将全局变量以引用&或指针*作为函数参数的意义

这么做是有意义的,具体取决于你的代码场景:

  • 提升代码可读性与通用性:如果函数原本是为操作局部变量设计的,现在要复用它来操作全局变量,传递引用/指针无需大幅修改函数逻辑;同时看函数参数就能明确它要操作的变量,比函数内部直接硬编码全局变量更清晰。
  • 灵活切换操作对象:同一个处理函数,既可以操作全局变量A,也可以操作全局变量B,通过传递不同的指针/引用就能实现,不用重复编写几乎相同的函数。
  • 适配单片机外设场景:在单片机开发中,很多全局变量是映射到外设寄存器的(比如GPIO、UART的控制寄存器),传递指针的话,同一个函数可以统一处理不同的外设寄存器,大幅提升代码复用性。

当然,如果函数从一开始就只打算固定操作某一个全局变量,那这种写法确实没必要,反而会增加不必要的代码复杂度。

内容的提问来源于stack exchange,提问作者shyney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:48:14