【发布时间】:2017-07-09 10:16:17
【问题描述】:
#include<stdio.h>
#include<conio.h>
int *x()
{
int y=10;
return (&y);
}
void main()
{
int *p;
clrscr();
p=x();
printf("%d",*p); // Output 10
getch();
}
这里当我们调用 x() 函数时,x 的激活记录被压入堆栈。当我们退出该函数时,激活记录和其中的所有局部变量都被破坏了。 那么,从 x 函数出来后,我们如何才能在 main 函数中访问 y 的值呢?输出值应该是一些垃圾值,因为“y”变量被破坏了。
【问题讨论】:
-
它在哪里说它必须是垃圾值? C 规范的哪一部分做出了这样的保证?
-
我的意思是垃圾值或任何未定义的值。我的观点是 y 的值 10 不应该是输出吧?
-
不,这是一个完全错误的假设。未定义表示任何值 - 包括 10。