C++是不能返回局部变量地址的。
int* func()
{
int a = 10;//局部变量 存放在栈区,栈区的数据在执行完毕后自动释放。
return &a;
}
int main()
{
int* p = func();
cout << *p << endl;//第一次可以打印正确的数字,是因为编译器做了保留
cout << *p << endl;//第二次这个数据就不在保留了。
}
但是我用visual studio 2022community运行后两次都成功打印。
我看网上还有另一个中测试方法。使用两个函数分别返回两个内部局部变量的地址。
int* func()
{
int a = 10;//局部变量 存放在栈区,栈区的数据在执行完毕后自动释放。
return &a;
}
int* func1()
{
int a = 10;//局部变量 存放在栈区,栈区的数据在执行完毕后自动释放。
return &a;
}
int main()
{
int* p = func();
cout << *p << endl;//第一次可以打印正确的数字,是因为编译器做了保留
cout << *p << endl;
int* p1 = func1();
cout << *p1 << endl;//第二次这个数据就不在保留了。
cout << *p1 << endl;//第二次这个数据就不在保留了。
}
还是没有测试成功。估计是vs2022做了极大的优化。
待找出vs2022的优化说明。