函数结束后,函数所占空间会自动销毁。那下面代码为什么还能得到局部变量的地址与值呢?
#include<iostream>usingnamespacestd;int*fun(){intval=10;cout<<&val<<endl;return&val;}...
#include <iostream>
using namespace std;
int* fun()
{
int val=10;
cout<<&val<<endl;
return &val;
}
int main()
{
int* p = fun();
cout<<*p<<endl;
cout<<p<<endl;
} 展开
using namespace std;
int* fun()
{
int val=10;
cout<<&val<<endl;
return &val;
}
int main()
{
int* p = fun();
cout<<*p<<endl;
cout<<p<<endl;
} 展开
3个回答
展开全部
那么这段代码可以运行是因为,你返回的地址在内存中仍然存在.return (int)&val。就是说,发生了隐式类型转换c/c++完全可以做到把整型变量当做指针使用,那么,假如其他程序又用到这个地址,程序就会奔溃。切记不要返回局部变量的地址,如果非要这么做,使用new运算符。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
val那块内存地址随时都有可能被收回重新利用,所以返回临时变量的指针是不安全的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询