返回的地址始终为 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;
}
.
希望你能得到答案
这里是简单的代码:
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;
}
.
希望你能得到答案