c++ 函数参数,指针和引用

voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}voidswap(int&a,int&b){inttemp=a;a=b;b... void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}

void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}

参数一个使用的是指针,一个使用的是引用
执行效率上那个更高,为什么?解释理由!

谢谢!!!
展开
 我来答
aaa833
推荐于2016-04-14 · TA获得超过717个赞
知道小有建树答主
回答量:841
采纳率:0%
帮助的人:643万
展开全部
效率差别不是很大,但是引用好一点。
用指针做形参,要另外开辟内存空间来存储实参的地址;但引用则不必。

其实引用最大的好处在于使用简单明了。比如你的swap函数,若用指针,调用时要写
swap(&x,&y);
而用引用,调用时直接写
swap(x,y);即可。
yu61917749
2009-07-26 · TA获得超过1336个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:241万
展开全部
效率是一样的阿.
因为引用实际是用别名.
指针实际是用地址.

在参数传递方面,引用比指针直观,可读性强:
1. 尽量使用引用代替指针,以下两条除外。
2. 如果必须传递数组,使用指针加元素个数。
3. 如果参数可能无效(null),使用指针,并判断(p == null)。

返回值方面:
1. 如果返回动态分配的对象或内存,必须使用指针,引用可能引起内存泄漏。
2. operator=的返回值必须是 Cxxx&。

除了传递参数和返回值,其它地方都应该是指针更好一些。

必须使用引用的地方:
1. operator=的返回值必须是 Cxxx&。
2. 运算符重载的时候:operator+(const Cxxx& lhs, const Cxxx& rhs); 不能用指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
微软首席架构师
2009-07-26 · TA获得超过1720个赞
知道小有建树答主
回答量:714
采纳率:0%
帮助的人:639万
展开全部
对比一下两者的汇编代码

; void swap(int *a, int *b)
;
assume cs:_TEXT
@swap$qpit1 proc near
push bp
mov bp,sp
sub sp,2
push si
push di
mov si,word ptr [bp+4]
mov di,word ptr [bp+6]
;
; {
; int temp = *a;
;
mov ax,word ptr [si]
mov word ptr [bp-2],ax
;
; *a = *b;
;
mov ax,word ptr [di]
mov word ptr [si],ax
;
; *b = temp;
;
mov ax,word ptr [bp-2]
mov word ptr [di],ax
;
; }
;
pop di
pop si
mov sp,bp
pop bp
ret

; void swap1(int &a, int &b)
;
assume cs:_TEXT
@swap1$qrit1 proc near
push bp
mov bp,sp
sub sp,2
push si
push di
mov si,word ptr [bp+4]
mov di,word ptr [bp+6]
;
; {
; int temp = a;
;
mov ax,word ptr [si]
mov word ptr [bp-2],ax
;
; a = b;
;
mov ax,word ptr [di]
mov word ptr [si],ax
;
; b = temp;
;
mov ax,word ptr [bp-2]
mov word ptr [di],ax
;
; }
;
pop di
pop si
mov sp,bp
pop bp
ret
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dahakawang
2009-07-28 · TA获得超过548个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:0
展开全部
在运行时都一样的。因为运行时程序在此都引用的是该变量的地址。

建议使用 引用 ,因为引用即是现代编程的一种保护机制。因为如果不是想通过改变参数而带回结果的话,一般我们总是使用引用,这样可以有效避免 在编程时程序员误更改变量的值,并且把这种影响带回了主程序。

话说,1L的兄弟,引用是C++的特性呀~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ztianshi100
2009-07-26 · TA获得超过1247个赞
知道小有建树答主
回答量:366
采纳率:0%
帮助的人:260万
展开全部
效率都是差不多的,谈不上高不高
不过还是建议用指针
用指针作形参~~~~
不知道怎么说,反正习惯了用指针
况且C语言指针是最大的特色,不用可惜了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式