我对以下两种情况感到困惑,为什么一种情况有效,另一种情况不起作用。
一个人工作:
int* test()
{
int j=5;
int *i = &j;
return i;
}
一个人没有工作:
int* test()
{
int j=5;
return &j;
}
它们都返回一个本地指针,不是吗?
谁能解释我背后的原因?感谢。
答案 0 :(得分:4)
返回指向局部变量的指针永远不会安全。您的两个示例在功能上都是相同的。
答案 1 :(得分:2)
两者都是未定义的行为。在这两种情况下,编译器都可以自由地做任何事情。
差异的实际原因可能是有两个变量而不是第一个版本中定义的变量,并且编译器优化器(或选择的优化设置)不够智能或没有足够的积极性来优化它。
除此之外,两个实例实际上是相同的,因为根据标准,任何可能的结果都是可接受的。如果在第一种情况下重新格式化您的硬盘驱动器,并在第二种情况下关闭计算机,结果将同样正确。