返回一个指针

use*_*652 5 c++ pointers

我不明白这个例子是如何工作的:

double * GetSalary()  {
  double salary = 26.48; 
  return &salary;
}

main() {
    cout << *GetSalary();  //prints 26.48

}
Run Code Online (Sandbox Code Playgroud)

salary是一个局部变量GetSalary(),因此在从函数返回后,该单元可能被另一个函数覆盖.我没有看到如何返回一个指向局部变量的指针(在堆上没有实例化)可能会起作用.

jua*_*nza 16

它不起作用.这是未定义的行为.它似乎有效,因为"正确的行为"是"任何可能的行为"的一个子集.


Luc*_*ore 8

您正在遇到未定义的行为,这意味着任何事情都可能发生.包括出现在工作中.

在函数外部,返回指针悬空(即它指向的内存无效).

为什么它似乎工作归结为实施.很可能内存没有被清除.因此,虽然您无法访问返回指针指向的内容,但在该内存中26.48仍然存在.但这只是偶然的.