静态本地变量
- 在本地变量定义时加上static修饰符就成为静态本地变量
- 当函数离开的时候,静态本地变量会继续存在并保持其值
- 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值
#include<stdio.h>
int f(void);
int gAll = 12;
int main(){
f();
f();
f();
return 0;
}
int f(void){
static int all = 1; //只在第一次调用这个函数时执行
printf("in f all=%d\n",all);
all +=2;
printf("agin in f all=%d\n",all);
return all;
}
in f all=1
agin in f all=3
in f all=3
agin in f all=5
in f all=5
agin in f all=7
- 静态本地变量实际上是特殊的全局变量
- 它们位于相同的内存区域
- 静态本地变量具有全局的生存期,函数内的局部作用域
- static在这里的意思是局部作用域(本体可访问)
#include<stdio.h>
int f(void);
int gAll = 12;
int main(){
f();
return 0;
}
int f(void){
int k = 0;
static int all = 1;
printf("&gAll=%p\n",&gAll);
printf("&all =%p\n",&all);
printf("&k =%p\n",&k);
return all;
}
&gAll=0000000000403010
&all =0000000000403014
&k =000000000062FE1C //很明显,上面两个的地址位于相同的存储空间
全局变量: 全局的生存期 全局的作用域
局部变量: 局部的生存期 局部的作用域
局部静态变量: 全局的生存期 局部的作用域