Cod*_*ody 5 c undefined-behavior
请考虑以下代码.
#include<stdio.h>
int *abc(); // this function returns a pointer of type int
int main()
{
int *ptr;
ptr = abc();
printf("%d", *ptr);
return 0;
}
int *abc()
{
int i = 45500, *p;
p = &i;
return p;
}
Run Code Online (Sandbox Code Playgroud)
输出:
45500
我知道根据链接这种行为是未定义的.但是为什么每次运行程序时我都能获得正确的值.
每次调用abc
它时,都会在堆栈顶部“标记”一个区域,作为它将写入所有局部变量的位置。它通过移动指示栈顶位置的指针来实现。该区域称为堆栈帧。当函数返回时,它通过将堆栈指针移到原来的位置来表明它不想再使用该区域。因此,如果您之后调用其他函数,它们将出于自己的目的重用堆栈的该区域。但是就您而言,您还没有调用任何其他函数。所以堆栈的那个区域保持相同的状态。
以上所有内容都解释了您的代码的行为。没有必要所有的 C 编译器都以这种方式实现函数,因此您不应该依赖这种行为。