我不明白这个例子是如何工作的:
double * GetSalary() {
double salary = 26.48;
return &salary;
}
main() {
cout << *GetSalary(); //prints 26.48
}
Run Code Online (Sandbox Code Playgroud)
salary
是一个局部变量GetSalary()
,因此在从函数返回后,该单元可能被另一个函数覆盖.我没有看到如何返回一个指向局部变量的指针(在堆上没有实例化)可能会起作用.
您正在遇到未定义的行为,这意味着任何事情都可能发生.包括出现在工作中.
在函数外部,返回指针悬空(即它指向的内存无效).
为什么它似乎工作归结为实施.很可能内存没有被清除.因此,虽然您无法访问返回指针指向的内容,但在该内存中26.48
仍然存在.但这只是偶然的.