将局部变量的指针返回给main()函数

时间:2017-10-28 06:42:37

标签: c

我试图将存储在局部变量中的值返回给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? 请告诉我代码中发生了什么。

1 个答案:

答案 0 :(得分:3)

调用func时,会为其局部变量xp创建一个堆栈。但是,当它返回时,该堆栈将被销毁。因此,p指向已被销毁的值,因此其行为未定义。