C++ 函数调用返回 0 值而不是指针

问题描述 投票:0回答:1

我试图了解 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
将打印一个地址。

c++ debugging
1个回答
0
投票
  • cout << "y before " << y << endl;
    具有未定义的行为,因为它读取未初始化的变量。

  • function
    返回一个悬空指针。
    f
    是函数的本地函数,因此函数返回的指针将指向丢失的内容。取消引用该指针将使您的程序出现未定义的行为。

根据我的理解,该函数应该返回一个地址到

y
,第二个cout应该打印出一个地址。

这个假设没有道理。

y
本身就是一个指针。如果您希望
y
的地址在任何地方都能被注意到,则必须采用
y
的地址:
&y

© www.soinside.com 2019 - 2024. All rights reserved.