1 普通局部变量
作用域和生命周期是有区别的,作用域外也可能还在生命周期内
#include <stdio.h>
int main()
{
int *p;
if(1)
{
int b = 1;
p = &b;
}
printf("%d\n", *p);
*p = 5;
printf("%d\n", *p);
return 0;
}
局部变量b的作用域是在if后面的程序块中,在if语句之外,就不是b的作用域了,但b所占空间并未释放,因为可以通过指针变量p对其进行访问。
2 静态局部变量
静态局部变量的作用域仅仅在定义变量的{}之内,但它的生命周期是程序运行的整个阶段,程序运行结束才释放空间。因此下面的代码,在函数fun中的静态局部变量,在fun外面仍然可以访问,不在作用域中,但仍处于生命周期内。
#include <stdio.h>
int * fun()
{
static int a=10;
int *p = &a;
return p;
}
int main()
{
int *p;
p = fun();
printf("%d\n", *p);
return 0;
}
输出
10