栈区里存放的是各类函数
在函数里定义的局部变量在函数结束后就会被释放掉
这时后就不能返回他的地址
例
int* fun()
{
int a = 10;
return &a;
}
int main()
{
int* p = fun();
printf("%d\n", *p);
printf("%d\n", *p);
}
当函数结束时a就会被释放所以*p的值就会有问题
可以将int a改为static int a
因为此时的a在已初始化的静态全局变量中,函数结束a的值就不会被释放
int* fun()
{
static int a = 10;
return &a;
}
int main()
{
int* p = fun();
printf("%d\n", *p);
printf("%d\n", *p);
}
也可以向堆区申请一块空间
int* fun()
{
int* a = (int*)malloc(100);
assert(a);
*a = 100;
return a;
}
int main()
{
int* p = fun();
printf("%d\n", *p);
printf("%d\n", *p);
}
当fun函数执行结束时a被释放,但p也指向这块空间所以可以通过p
读取这块空间的值。