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;
}
参数一个使用的是指针,一个使用的是引用
执行效率上那个更高,为什么?解释理由!
谢谢!!! 展开
{
int temp = *a;
*a = *b;
*b = temp;
}
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
参数一个使用的是指针,一个使用的是引用
执行效率上那个更高,为什么?解释理由!
谢谢!!! 展开
7个回答
展开全部
效率是一样的阿.
因为引用实际是用别名.
指针实际是用地址.
在参数传递方面,引用比指针直观,可读性强:
1. 尽量使用引用代替指针,以下两条除外。
2. 如果必须传递数组,使用指针加元素个数。
3. 如果参数可能无效(null),使用指针,并判断(p == null)。
返回值方面:
1. 如果返回动态分配的对象或内存,必须使用指针,引用可能引起内存泄漏。
2. operator=的返回值必须是 Cxxx&。
除了传递参数和返回值,其它地方都应该是指针更好一些。
必须使用引用的地方:
1. operator=的返回值必须是 Cxxx&。
2. 运算符重载的时候:operator+(const Cxxx& lhs, const Cxxx& rhs); 不能用指针。
因为引用实际是用别名.
指针实际是用地址.
在参数传递方面,引用比指针直观,可读性强:
1. 尽量使用引用代替指针,以下两条除外。
2. 如果必须传递数组,使用指针加元素个数。
3. 如果参数可能无效(null),使用指针,并判断(p == null)。
返回值方面:
1. 如果返回动态分配的对象或内存,必须使用指针,引用可能引起内存泄漏。
2. operator=的返回值必须是 Cxxx&。
除了传递参数和返回值,其它地方都应该是指针更好一些。
必须使用引用的地方:
1. operator=的返回值必须是 Cxxx&。
2. 运算符重载的时候:operator+(const Cxxx& lhs, const Cxxx& rhs); 不能用指针。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对比一下两者的汇编代码
; 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
; 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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在运行时都一样的。因为运行时程序在此都引用的是该变量的地址。
建议使用 引用 ,因为引用即是现代编程的一种保护机制。因为如果不是想通过改变参数而带回结果的话,一般我们总是使用引用,这样可以有效避免 在编程时程序员误更改变量的值,并且把这种影响带回了主程序。
话说,1L的兄弟,引用是C++的特性呀~~~
建议使用 引用 ,因为引用即是现代编程的一种保护机制。因为如果不是想通过改变参数而带回结果的话,一般我们总是使用引用,这样可以有效避免 在编程时程序员误更改变量的值,并且把这种影响带回了主程序。
话说,1L的兄弟,引用是C++的特性呀~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
效率都是差不多的,谈不上高不高
不过还是建议用指针
用指针作形参~~~~
不知道怎么说,反正习惯了用指针
况且C语言指针是最大的特色,不用可惜了
不过还是建议用指针
用指针作形参~~~~
不知道怎么说,反正习惯了用指针
况且C语言指针是最大的特色,不用可惜了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询