社区
C++ 语言
帖子详情
引用与指针的区别
richard_ma
2006-10-20 07:22:23
在向函数传递参数和参数返回值中,引用和指针有什么区别?
在向函数传递参数和参数返回值中,在用法上有什么不同?
在向函数传递参数和参数返回值中,二者的含义有什么不同?
谢谢
...全文
899
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)
引用
和
指针
的
区别
本文详细介绍了C++中
引用
和
指针
的
区别
。
引用
是变量别名,声明时须初始化且不能改变目标;
指针
存储变量内存地址,可运行时重新赋值。二者在初始化、访问对象方式、内存地址访问、指向空值、修改对象值等方面存在差异,还介绍了常量
引用
与
指针
的情况。
指针
和
引用
的
区别
本文详细介绍了C++中的
指针
与
引用
概念,包括它们的定义、使用场景及
区别
。并通过实例比较了
指针
与
引用
在不同情况下的表现,帮助开发者更好地选择适合的数据类型。
指针
与
引用
区别
本文介绍了
指针
与
引用
的
区别
。非空方面,
引用
必须指向对象,代码效率更高;合法性上,使用
引用
无需检测,
指针
需防为空;可修改性上,
指针
可重新赋值,
引用
初始化后不能改变指向。还说明了
指针
的应用场景,以及常
引用
和
指针
的相关特性。
指针
与
引用
的
区别
本文探讨了C/C++中
引用
和
指针
的本质
区别
,包括它们的行为特性、内存分配方式、编译处理过程等。通过对比,揭示了
引用
作为不可更改的别名,与可动态调整指向的
指针
之间的差异。
深度分析c++
引用
的本质以及
引用
与
指针
的
区别
本文深入剖析C++
引用
的本质:语法层面为变量别名、无独立内存,但底层由const
指针
实现;系统对比
引用
与
指针
在初始化、可变性、空值支持、sizeof行为、解
引用
方式等方面的7项关键
区别
;阐明
引用
权限收缩/放大规则、常
引用
优化原理、传参与返回值场景下的最佳实践,并指出
引用
因不可重绑定特性无法替代数据结构中的
指针
。
C++ 语言
65,211
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章