【发布时间】:2020-02-25 11:35:02
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
int *p;
void f()
{
int a=5;
p=&a;
printf("%d ",*p);
}
void main()
{
f();
printf("%d",*p);
}
为什么 O/P 是 5 5? 函数调用结束后,局部变量 a 被删除。所以 p 应该指向无效对象
【问题讨论】:
-
因为未定义的行为不能保证出错。发生的事情是不确定的,但它发生了。如果您在
f();和printf("%d",*p);之间插入另一个函数调用,您可能会得到不同的结果。 -
从函数返回后,C不浪费时间初始化本地数据;它就这样离开了。但请记住;当函数在作用域内时,它的数据(属于函数的内存空间)受到保护,不会被覆盖。然而,当代码指针到达函数的
return行时,所有内存空间都保持原样,但很容易被覆盖(不再受保护)。从函数返回后,main可能会也可能不会打印5,这取决于本地内存是否被覆盖。 -
@aditi19 如果您不理解my answer 的某个短语,请告诉我以改进它。
-
明白...谢谢
标签: c pointers dangling-pointer