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

C语言函数中的静态变量为何未被重复初始化?

C语言静态局部变量为何不会每次调用函数时重置?

先看你给出的代码:

void plus_five() {
    static int i = 10;
    i += 10;
    printf("%d\n", i);
}

int main() {
    for(int i = 0;i < 10;i++) {
        plus_five();
    }
    return 0;
}

你提到运行后输出:

10
20
30
40
50
60
70
80
90
100

(注:输出和代码逻辑存在小出入,推测是代码中printf和i +=10的顺序写反了,但不影响核心问题的解释)

核心原因

C语言里,static修饰局部变量时会改变它的存储特性:

  • 普通局部变量存在栈内存中,每次函数调用都会重新分配内存、执行初始化,函数结束后内存被释放,变量值也随之清空。
  • 静态局部变量则存储在全局/静态存储区,它的生命周期和整个程序运行周期一致,初始化操作只会在程序第一次执行到该变量定义语句时执行一次。之后不管函数被调用多少次,都不会再执行初始化,直接使用上一次调用结束时变量的当前值。

对应到你的代码:
第一次调用plus_five()时,执行static int i = 10;完成初始化;之后每次调用该函数,都会跳过这行初始化代码,直接对i进行递增操作,所以变量i会持续累加,不会被重置为10。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:01:03