#include <stdio.h>
int p();
int main() {
p();
p();
p();
}
int p()
{
int all=0;
printf("in %s all=%d\n",__func__,all);
all+=2;
printf("again in %s all=%d\n",__func__,all);
}
in p all=0
again in p all=2
in p all=0
again in p all=2
in p all=0
again in p all=2
--------------------------------
Process exited after 0.04492 seconds with return value 0
请按任意键继续. . .
首先通过这个问题引入,
接下来在p函数中改变all为static(静态) int,
#include <stdio.h>
int p();
int main() {
p();
p();
p();
}
int p()
{
static int all=0;
printf("in %s all=%d\n",__func__,all);
all+=2;
printf("again in %s all=%d\n",__func__,all);
}
in p all=0
again in p all=2
in p all=2
again in p all=4
in p all=4
again in p all=6
--------------------------------
Process exited after 0.04507 seconds with return value 0
请按任意键继续. . .
会发现每次重现调用p函数all的值是上次离开函数的那个值,这时候肯定有人疑惑,我直接定义一个全局变量不就行了,这个静态本地变量实际上是特殊的全局变量。接着看下面的程序-----
#include <stdio.h>
int gall;
int p();
int main() {
p();
}
int p()
{
int a;
static int all=0;
printf("%p\n",&a);
printf("%p\n",&all);
printf("%p\n",&gall);
}
000000000062FDEC
0000000000407034
0000000000407030
--------------------------------
Process exited after 0.03902 seconds with return value 0
请按任意键继续. . .
这时候会发现静态本地变量all和全局变量gall地址上是紧挨着的,验证了上面的话。
但是特殊的含义就是静态本地变量只能在当前函数中使用。所以是特殊的全局变量。
所以总有需要它出现的时候,只是现在还未知。