返回函数中的本地指针

时间:2015-04-17 23:20:32

标签: c++

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

一个人工作:

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

一个人没有工作:

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

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

谁能解释我背后的原因?感谢。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

差异的实际原因可能是有两个变量而不是第一个版本中定义的变量,并且编译器优化器(或选择的优化设置)不够智能或没有足够的积极性来优化它。

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