1

这是简单的代码:

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

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

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

4

2 回答 2

3

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

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

于 2020-04-12T13:19:09.663 回答
-1

试试这个代码。
您试图访问局部变量的地址时出现问题,它在函数 as_return() 之外无法访问。因此,在全局中声明它,以便每个人都可以访问它。

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

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

.
输出画面

我希望你得到答案

于 2020-04-12T13:23:26.503 回答