引用与指针的区别

richard_ma 2006-10-20 07:22:23
在向函数传递参数和参数返回值中,引用和指针有什么区别?
在向函数传递参数和参数返回值中,在用法上有什么不同?
在向函数传递参数和参数返回值中,二者的含义有什么不同?
谢谢
...全文
810 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
KenYuan2016 2006-10-24
  • 打赏
  • 举报
回复
引用和指针:
1。引用在定义的时候必须初始化。指针不必。
2。没有指向空的应用。指针可以。
3。引用不能改变。指针可以。

做为函数参数传递时:
我们来实现一下 string operator +
A。对象本身实现 operator+(string a, string b);
B。指针实现 operator+(string *a, string *b);
C。引用实现 operator+(const string &a, const string &b);
区别:
A:对象传递,函数体内实现的时候,必须为a,b分配空间,调用a,b的拷贝构造函数。开销大,速度慢。
B:我们速度上去了,但是直观性却很差,string c, d;我们实现的时候怎么写? &c+&d, 很怪是吧。而且在operator+实现体里面我们必须对c,d做判断。
C:上面A,B中所有的缺点都消失了吧。 :-)

补充:引用和const指针很多地方很像,但是我们还是要区分开,const指针到底是修饰的是谁,
比如: const *p const p * :-)
gaohanj 2006-10-24
  • 打赏
  • 举报
回复
非常赞同四楼的说法,up
qxbnit 2006-10-24
  • 打赏
  • 举报
回复
这点其实可以向JAVA学习,,,
搞得太复杂了
seraphimpk 2006-10-24
  • 打赏
  • 举报
回复
mark,学习了
cubety 2006-10-24
  • 打赏
  • 举报
回复
mark
Macor 2006-10-24
  • 打赏
  • 举报
回复
up
celeil 2006-10-24
  • 打赏
  • 举报
回复
记得南大考研曾经考过这题,他的答案主要集中在,第一,引用的初始化,第二,不可以更改被引用的变量。
  由于在很多实现里,常常会用指针实现引用,故而除此两点外,南大的教材及考题没有特别强调二者的不同。
Kusk 2006-10-23
  • 打赏
  • 举报
回复
嗯,顺便说一句。一般编译器实现引用的时候,尤其是参数传递时,实际上底层还是转化成转指针
来实现的。只不过在必要的时候编译器会自动帮你解引用,所以对程序员来说是方便了许多。
IP_V6 2006-10-23
  • 打赏
  • 举报
回复
路过~~
四楼的经典
mekiss 2006-10-23
  • 打赏
  • 举报
回复
学习下
IMGGTOO 2006-10-22
  • 打赏
  • 举报
回复
受教育了!
今天太晚了,没看完.先做个记号,明天来再接着看!
jwqu 2006-10-22
  • 打赏
  • 举报
回复
maek 下.........明天再看
csucj 2006-10-21
  • 打赏
  • 举报
回复
引用和指针三大区别:
1.引用必须初始化,指针不必.
2.引用初始化后不能被改变,指针可以改变所指的变量.
3.不存在指向空值的引用,但是存在指向空值的指针.
justrun2005 2006-10-20
  • 打赏
  • 举报
回复
引用,在概念定义上是有很大不同的,但是正如必知必会上讲的,有很多编译器是用指针实现引用的。
iambic 2006-10-20
  • 打赏
  • 举报
回复
形式区别,概念区别。本质上差不多。
doudouHuY 2006-10-20
  • 打赏
  • 举报
回复
使用指针作为行参,需要在堆栈中为其分配空间,使用引用作为行参,不需要。
实际上,俺在vc下汇编代码中看到还是在栈中占空间
楼下继续
doudouHuY 2006-10-20
  • 打赏
  • 举报
回复
二楼说引用是别名,那也就是说引用和原来的变量是同一个了,那么函数返回引用是不能用的了?函数在运行完后,在函数内定义的变量就不存在了,也就没有别名了?我这么说对吗?
====
int& fn()
{
int a = 3;
return a;
}
a是自动变量,返回得是int引用,你能说没用吗?
实际上和返回值一样,会产生临时变量,看看汇编码就知道,是将自动变量a保存到eax中,然后函数返回,相关寄存器出栈,此时自动变量a不存在了。
之后,如果你用b = fn();会将eax的内容赋值给b。
注意:不要返回自动变量的指针,因为此后通过此指针访问的东西不可预料。
飞哥 2006-10-20
  • 打赏
  • 举报
回复
有共同点~
当然差别很大了

~~~~~~~~·

本质是不同的,首先一个就是没有分配空间的,尽管它和const都是在定义时就要初始化
而且不可以改变指向,一个是给人家起个外号,一个是却有其物

~~~~~~~~·

闪人~
richard_ma 2006-10-20
  • 打赏
  • 举报
回复
听大家说,我觉得引用是const版的指针,可以这么理解吗?
飞哥 2006-10-20
  • 打赏
  • 举报
回复
在向函数传递参数和参数返回值中,引用和指针有什么区别?
===============================
A:这里传递指针和引用都能达到相同的效果
◎就是不必进行值拷贝传递参数
◎能够在函数返回后保持函数内修改后的状态
◎指针是分配空间的,引用不分配空间
◎指针可以指向不同对象,也可以指空,但是引用只能在声明的时候初始化指向一个对象,并且不能修改了
◎这个其实也是差不多的,通返回“值”相比,提高了效率
避免临时对象的返回,因为在函数退出后,临时对象被释放,应用也就没有意义了


谢谢
加载更多回复(6)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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