我试图了解 C++ 指针和使用函数调用的引用的基础知识。具体来说,我的代码如下所示。
#include <iostream>
using namespace std;
int* function(int f){
f = f + 3;
return &f;
}
int main(int argc, char** argv)
{
int x = 7;
int* y;
cout << "y before " << y << endl;
y = function(x);
cout << "y after " << y << endl;
return 0;
}
我得到的输出如下。
y before 0
y after 0
根据我的理解,该函数应该返回一个地址到
y
,第二个cout
应该打印出一个地址。请帮助我理解我在这种情况下所犯的错误。感谢您的帮助。
我尝试运行代码,并期望返回地址到
y
,第二个 cout
将打印一个地址。
cout << "y before " << y << endl;
具有未定义的行为,因为它读取未初始化的变量。
function
返回一个悬空指针。 f
是函数的本地函数,因此函数返回的指针将指向丢失的内容。取消引用该指针将使您的程序出现未定义的行为。
根据我的理解,该函数应该返回一个地址到
,第二个cout应该打印出一个地址。y
这个假设没有道理。
y
本身就是一个指针。如果您希望 y
的地址在任何地方都能被注意到,则必须采用 y
的地址:&y
。