指针返回问题,把我搞晕了 int * fun(){ int a = 10; return &a;}有没有错误?说详细点。欢迎讨论。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 错,fun结束以后a就不存在了。 先试试这个:int* p=fun();int* q=fun();if(p==q)AfxMessageBox("=");else AfxMessageBox("!=");再看看危险性:int* p=fun();int* q=fun(); *q=9;int r=*p;//哦!r是9,不是我想要的 a 是函数fun()的 自动变量, 其空间是在栈中分配的。当函数返回后, 此函数这一段栈都处于可写状态, 而且很快就被其他函数调用时破坏了。所以就导致所说的“临时变量,函数返回后该变量就释放”。可以改成这样:int * fun(){ static int a = 10; //静态变量 return &a;} 各位,你们还没有给楼主解释清楚,不过我也不懂,个人认为: 返回一个指向int的指针,如: int i; i=*fun();则i=10>>>>>这是事实。 To:楼上i=10是因为碰巧函数释放后,原来使用的内存的内容还没有被冲掉,但你不觉得这很危险吗? akiko说得很正确.返回的数是一个不确定的数.因为a的值的有效性在{}内 如何使显示的图像画面倒置? 请推荐下并行访问性能较好的数据库 网络性能测试 对话框插入Crystal Report Viewer Control 9控件后发布的问题,急急急~ 结构化异常处理与CloseHandle的困惑 asp学习经验 拔号上网连通时,在托盘会有一个连接图标,怎样把它隐藏? 创建com对象为什么要间接的用类厂创建? 在用MFC编程时使用new、delete怎么会出错? 怎么关闭自己程序中打开的浏览器中的标签页啊? 如何控制 usb disk 弹出和刷新。 怎样让某几个工具栏随某个视图的出现而出现,随该视图的消失而消失
int* p=fun();
int* q=fun();
if(p==q)AfxMessageBox("=");
else AfxMessageBox("!=");
再看看危险性:
int* p=fun();
int* q=fun();
*q=9;
int r=*p;//哦!r是9,不是我想要的
当函数返回后, 此函数这一段栈都处于可写状态, 而且很快就被其他函数调用时破坏了。所以就导致所说的“临时变量,函数返回后该变量就释放”。
可以改成这样:int * fun()
{
static int a = 10; //静态变量
return &a;}
返回一个指向int的指针,如:
int i;
i=*fun();
则i=10>>>>>这是事实。
i=10是因为碰巧函数释放后,原来使用的内存的内容还没有被冲掉,但你不觉得这很危险吗?
返回的数是一个不确定的数.
因为a的值的有效性在{}内