基础:
1.在定义本地变量时在前面加上static修饰符使其变为静态本地变量;
2.当离开函数使,静态本地变量的值会继续存在并保持原值;
3.静态本地变量的赋值只发生在第一次进入函数时,当再次进入时会保持上次离开时的值;
4.由于静态本地变量与全局变量拥有相同的内存区域,因此它实际上是拥有全局生存期,但拥有在函数内局部作用域的特殊全局变量。
#include<stdio.h>
int ALL = 0;
void fun();
int main(int argc, char const* argv[])
{
fun();
fun();
fun();
return 0;
}
void fun()
{
int k = 0;
static int all = 0;
ALL++;
all++;
k++;
printf("&ALL=%p\n", &ALL);
printf("&all=%p\n", &all);
printf("&k =%p\n", &k);
printf("ALL=%d\n", ALL);
printf("all=%d\n", all);
printf("k =%d\n", k);
}
输出结果如下:
&ALL=00007FF6683FC170
&all=00007FF6683FC174
&k =000000BCB03FFB24
ALL=1
all=1
k =1
&ALL=00007FF6683FC170
&all=00007FF6683FC174
&k =000000BCB03FFB24
ALL=2
all=2
k =1
&ALL=00007FF6683FC170
&all=00007FF6683FC174
&k =000000BCB03FFB24
ALL=3
all=3
k =1
由以上信息我们可以看到全局变量“ALL"与静态本地变量”all"的储存位置相邻,但与本地变量“k"相距较远,且可以证明以上基础第三条。