返回值为引用 我晕了.......
#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;
}
指针 引用
[解决办法]
这是个反面教材。
[解决办法]
1. 动态分配的内存都返回指针。如果返回引用,代码可读性太差了。代码的读者未必是代码的作者。
2. 修改一个已经释放的空间,行为未知,后果自负。
[解决办法]
第一,楼主疑惑的地方跟引用一丁点的关系都没有
第二,删除对象等等只代表你失去了对象所在的这块内存的专用权,它随时可以被用作其他用途,而不代表这块内存就消失了,那需要你砸坏内存条才能办到
[解决办法]
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。
[解决办法]
引用即别名
指针即地址
[解决办法]
返回引用的函数还可以作为左值,就是说可以给函数赋值!如fun()=100;
结果是*p=100;