C++指针引用形参问题 本帖最后由 mweibiao 于 2011-06-03 20:34:51 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 C里面的引用类型,首先要知道int a = 1;int &b = a; //这里b是引用类型,引用a,也就是说b和a是同一个内存地址,b也就相当于a的别名b = 2; //既然,改变b的内存地址的内容,也就相当于改变a的内容,因为a和b是同一个地址,所以a也是2int &b = a; 效果上等同于 int *b = &a; //但这样的话b是指针类型,指向a的地址,要改变a就需要改变*b,即改变*b=2,那么a也会变为2,这里注意b本身是个地址,所以*b才是内容,这是指针和引用类型的区别好了,有了这个知识,再来看你的代码mm* &p=a->l; //这里p是个引用类型,引用a->l,也就是说p是a->l的别名然后p=c;//改变p就相当于改变a->l,也就是a-l=c所以最后输出是c->num,也就是3如果改为mm* p=a->l; //p是这指针类型,p=a->l,也就是p和a->l的值(是个地址)相等然后p=c;这里是改变p的指向,跟a->l没有任何关系,a->l还是原来的值(地址),也就是a-l还是等于b所以最后输出是b->num,也就是2 引用通俗点讲就是为变量创建一个别名,这个存在主要是为了尽量避免使用指针(尤其是二重指针)mm* &p=a->l;可以理解为p就是a->l的别名,也就是一块内存对应两个(多个)变量名修改了p就修改了a->l比如int a=10;int &b=a;那么b就是a的别名,两个东西使用同一个内存地址,也就说&a与&b是一样的 引用是C++的概念,C没有这东西,C里只能用指针同样的效果要写成mm** p=&a->l;*p=c; 请教一个问题,关于继承、多态、方法覆盖 Java 开发实战经典里有一个登陆的实例 有一处定义字符串数组看不懂~请教!! java中菜单被挡住的问题 千人工程怎么样?从那出来的人都在做什么? eclipse安装ve需要下载这个页面的哪几个文件???? 帮帮忙。。。。 如何从TextField中得到其中输入的string 初学者的问题: 小弟初学Java,一个运行错误,请大家帮我看看。 javamail发送邮件如何知道发送的进度状态,就是显示发送了百分之几? 新手,求java数据挖掘思路(对xml的操作) java有没有语音识别方面编程的API?在线等高手的指教....
int a = 1;
int &b = a; //这里b是引用类型,引用a,也就是说b和a是同一个内存地址,b也就相当于a的别名
b = 2; //既然,改变b的内存地址的内容,也就相当于改变a的内容,因为a和b是同一个地址,所以a也是2int &b = a; 效果上等同于 int *b = &a; //但这样的话b是指针类型,指向a的地址,要改变a就需要改变*b,即改变*b=2,那么a也会变为2,这里注意b本身是个地址,所以*b才是内容,这是指针和引用类型的区别好了,有了这个知识,再来看你的代码
mm* &p=a->l; //这里p是个引用类型,引用a->l,也就是说p是a->l的别名
然后p=c;//改变p就相当于改变a->l,也就是a-l=c
所以最后输出是c->num,也就是3如果改为
mm* p=a->l; //p是这指针类型,p=a->l,也就是p和a->l的值(是个地址)相等
然后p=c;这里是改变p的指向,跟a->l没有任何关系,a->l还是原来的值(地址),也就是a-l还是等于b
所以最后输出是b->num,也就是2
可以理解为p就是a->l的别名,也就是一块内存对应两个(多个)变量名
修改了p就修改了a->l比如int a=10;
int &b=a;
那么b就是a的别名,两个东西使用同一个内存地址,也就说&a与&b是一样的
mm** p=&a->l;
*p=c;