static 局部变量 · 只初始化一次 · 跨调用保留值
作用域仍是局部,但生命周期 = 整个程序;它住在静态存储区,不随函数返回而消亡
计数器函数
int counter() {
static int count = 0;
count = count + 1;
return count;
}
↑ 初始化只在第一次调用时执行一次
int main() {
cout << counter(); // ?
cout << counter(); // ?
cout << counter(); // ?
每次调用
静态存储区(程序全程存在,只有一份)
count
0
活到程序结束
跨调用保留 →
栈(每次调用新建一个帧,返回即销毁)
第 1 次调用 · counter() 的栈帧
返回地址 / 局部
return
?
帧随 return 一起消失
读同一个
count 并 +1
▶ 重播