静态本地变量
- 在本地变量定义是加上static修饰符就成为静态本地变量
- 当函数离开的时候,静态本地变量会继续存在并保持其值
- 静态本地变量的初始化在第一次进入这个函数时做,以后进入函数时会保持山上次离开时的值
#include<stdio.h>
int f(void);
int main(int argc, char const *argv[])
{
f();
f();
f();
return 0;
}
int f(void)
{
static int all = 1;
printf("in %s all=%d\n", __func__, all);
all += 2;
printf("agn in %s all=%d\n", __func__, all);
return all;
}
in f all=1
agn in f all=3
in f all=3
agn in f all=5
in f all=5
agn in f all=7
- 静态本地变量实际上是特殊的全局变量
- 他们位于相同的内存区域
- 静态本地变量具有全局的生存期,函数内的局部作用域
- static在这里的意思是局部作用域(本地可访问)
#inlcude<stdio.h>
int f(void);
int gAll = 12;
int main(int argc, char const *argv[])
{
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);
printf("in %s all=%d\n", __func__, all);
all += 2;
printf("agn in %s all=%d\n", __func__, all);
return all;
}
&gAll=00402000
&all =00402004
&k =0060FEFC
in f all=1
agn in f all=3
*返回指针的函数
- 返回本地变量的地址是危险的
- 返回全局变量或者静态本地变量的地址是安全的
- 返回在函数内malloc的内存是安全的,但是容易造成问题
- 最好的做法是返回传入的指针
网友评论