返回的地址始终为 0 而不是实际值

The address always returned is 0 instead of the actual value

这里是简单的代码:

int *ad_return()
{
    int a=600;
    cout << &a << endl;
    return &a;
}

int main()
{
    cout << ad_return();
    return 0;
}

输出是意外的。第一个 cout 打印一个看起来像地址的地址,但 main 中的 cout 打印一个合法的 0。我在任何地方都找不到解释。

根据我的实验,我得出以下结论:

由于已经超出范围的局部变量的地址未定义,gcc 和 g++ 似乎决定实现一个将其设置为零的功能(可能是为了确保代码段错误而不是生成完全奇怪的行为)。它不会在 clang 中执行此操作,但该值未定义,因此这两个编译器都按照标准运行。

试试这个代码。
您尝试访问局部变量的地址时出现问题,无法在函数 as_return() 之外访问它。所以在global声明一下,让所有人都可以访问。

   #include<iostream>
  using namespace std;
  int a;
  int *ad_return()
  {
   a=600;
   cout << &a << endl;
   return &a;
  }

  int main()
  {
   cout << ad_return();
   return 0;
   }

.

希望你能得到答案