返回函数中的本地指针

return a local pointer in a function

本文关键字:指针 函数 返回      更新时间:2023-10-16

我对以下两种情况感到困惑,为什么一种有效,另一种不起作用。

一个工作:

int* test()
{
    int j=5;
    int *i = &j;
    return i;
}

一个不起作用:

int* test()
{
    int j=5;
    return &j;
}

它们都返回一个本地指针,不是吗?

谁能解释一下背后的原因?谢谢。

返回指向局部变量的指针从来都不安全。您的两个示例在功能上是相同的。

两者都是未定义的行为。 在这两种情况下,编译器都可以自由地做任何它喜欢的事情。

造成差异的实际原因可能是有两个变量,而不是第一个版本中定义的一个变量,并且编译器优化器(或选择的优化设置)不够智能或不够激进,无法对其进行优化。

除此之外,这两个例子实际上是相同的,因为根据标准,任何可能的结果都是可以接受的。 如果在第一种情况下重新格式化硬盘驱动器,并在第二种情况下关闭计算机,则结果同样正确。