int main()
{
f();
f();
f();
return 0;
}
int f()
{
static int all = 0;
int k = 0;
all++;
k++;
printf("all=%d\n", all);
printf("k=%d\n", k);
return 0;
}
这里在f()函数的内部定义了int型的变量all,并用static进行声明,这里实际上是创建了一个全局变量all,只在第一次执行时初始化一次,在函数结束时,依然存在,依然保持函数结束后的值,后面不进行初始化了,但是只能在所定义的函数内部使用
运行结果
all=1
k=1
all=2
k=1
all=3
k=1
说明all在这里起着全局变量的作用,但是只能在f()内部进行只有,只有局部作用域,在main()函数里面无法进行使用,并且查询地址发现all和k并不在一起,实际上挂在了全局变量的地址内,也就是内存地址是全局的
&all=002AA1F0
&gall=002AA1EC
&k=00AFFA80
静态本地变量实际上是特殊的全局变量,他们位于形同的内存区域,静态本地变量具有全局的生存区,函数内部的局部作用域,静态就是解释成不动了,