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
相关产品推荐
相关产品推荐

