#include <stdio.h>
int* function1(void);
int main()
{
int x = 10;
int *p = function1();
printf("%d\n", *p);
printf("%d\n", p);
}
int* function1(void)
{
int z;
z = 20;
z++;
return &z;
}
- 变量“z”是“function1”的本地变量,并且在 “function1”已终止。
- 现在要访问变量“z”的内存空间中的值,其 地址由函数返回。
- 所以,即使终止后,变量的内存空间也会 'z' 仍将被保留,因为指针访问变量?在这种情况下,内存空间的属性是什么?
- 或者如果其他变量分配了相同的内存空间怎么办 变量“z”?
注意:代码块的GCC编译器已成功编译程序,没有任何错误和警告。
最佳答案
一般来说,您所做的事情未定义。
但是,在 Intel 架构上,z
位于堆栈中,返回后,如果您不调用任何其他函数,该值可能> 仍然可用,因为内存尚未被重用。一旦您调用另一个函数,内存可能将被覆盖,因此将包含垃圾。
一般来说:不要这样做!
关于c - 分配给另一个函数的局部变量的自动存储类变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52515951/