我试图将存储在局部变量中的值返回给main()函数。
#include<stdio.h>
int *func();
int main()
{
int *ptr;
ptr = func();
printf("%d", *ptr);
printf("%d", *ptr);
return 0;
}
int *func()
{
int x = 5, *p;
p = &x;
return p;
}
第一个printf()语句给出output = 5,但是第二个printf()语句给出了一个垃圾值作为输出。
我知道本地变量&#39; x&#39;函数&#34; func()&#34;之后将不存在终止。那么为什么第一个printf()语句打印5? 请告诉我代码中发生了什么。
答案 0 :(得分:3)
调用func
时,会为其局部变量x
和p
创建一个堆栈。但是,当它返回时,该堆栈将被销毁。因此,p
指向已被销毁的值,因此其行为未定义。