返回值为引用 我晕了.......

cuilll 2013-06-17 05:00:24
#include <string.h>
#include <iostream>
using namespace std;



int & fun()
{
int *p1=new int; //在内存中分配一个整数变量的大小,地址赋值给p
if(!p1) //如果分配不成绩
{
cout<<"Error,Memory allocation failture!"<<endl;
exit(0);
}


int &rp=*p1; //若分配成绩,定义rp是p指向空间的引用
rp=5; // 即 *p=5


return rp; //返回rp,即返回*p
}

int main(){


int & rp=fun(); //定义函数的引用
int *p=&rp; //定义指针,赋值为rp的指针


cout<<*p<<endl; //输出rp的值,即fun()的值

// 上一条语句的调用相当于: cout<<fun()<<endl;
//因为返回值为引用,又相当于 cout<<rp<<endl;(此rp为fun()函数中的rp)






delete p; //释放p指针指向的空间
*p=10; //给rp赋值 000000... 不懂哇 都删除了的 咋还可以赋值








cout<<rp; //输出rp的值


return 0;


}






...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohutushen30 2013-06-17
  • 打赏
  • 举报
回复
返回引用的函数还可以作为左值,就是说可以给函数赋值!如fun()=100; 结果是*p=100;
cuilll 2013-06-17
  • 打赏
  • 举报
回复
有点懂起了 谢谢各位了
赵4老师 2013-06-17
  • 打赏
  • 举报
回复
引用即别名 指针即地址
赵4老师 2013-06-17
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。
baichi4141 2013-06-17
  • 打赏
  • 举报
回复
第一,楼主疑惑的地方跟引用一丁点的关系都没有 第二,删除对象等等只代表你失去了对象所在的这块内存的专用权,它随时可以被用作其他用途,而不代表这块内存就消失了,那需要你砸坏内存条才能办到
mujiok2003 2013-06-17
  • 打赏
  • 举报
回复
引用 2 楼 cuilll 的回复:
[quote=引用 1 楼 mujiok2003 的回复:] 这是个反面教材。
求解释[/quote] 1. 动态分配的内存都返回指针。如果返回引用,代码可读性太差了。代码的读者未必是代码的作者。 2. 修改一个已经释放的空间,行为未知,后果自负。
cuilll 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 mujiok2003 的回复:
这是个反面教材。
求解释
mujiok2003 2013-06-17
  • 打赏
  • 举报
回复
这是个反面教材。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧