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

来源:百度知道 编辑:UC知道 时间:2024/06/09 13:29:37
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;
}

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

谢谢!!!

1、常规情况
函数参数传递是所谓的“值传递”。啥意思,就是传的只是值,而不是变量自己以身相许。上面的例子来说,main中的ab传递给函数的ab发生了什么呢,是main中的ab把值传递给了函数的ab,这是四个变量!!!main的ab和swap的ab不是一码事!!!当swap通过传值得到a5b10后,在swap中会互换,但是main的中的ab怎么会变呢?他们传值完毕后就没有关系了!
2、引用
什么叫引用?引用时变量的别名,也就是引用不是一个独立的变量,只能依附于其他变量。你的例子中swap中没有ab两个变量,只有main中ab的两个别名,只是别名碰巧也叫ab。在swap中对swap的ab的任何操作,本质上操作的都是main的ab!想想一下一个人在mian中叫张三,脸上有胡子。他的小名叫狗剩。在swap中我们说,吧狗剩的胡子刮了。然后回到main中,张三同学的胡子有没有?当然没有了
3、指针
指针存放对象的地址。在你的例子中,swap中的ab和main中的ab的关系式,swap是mian中ab的地址。想想一下,mian中的ab地址为AB,在swap中我们说吧A地址的家伙变为100,B地址的变为1000.请问mian中变了没有?当然会变!!

效率差别不是很大,但是引用好一点。
用指针做形参,要另外开辟内存空间来存储实参的地址;但引用则不必。

其实引用最大的好处在于使用简单明了。比如你的swap函数,若用指针,调用时要写
swap(&x,&y);
而用引用,调用时直接写
swap(x,y);即可。

效率是一样的阿.
因为引用实际是用别名.
指针实际是用地址.

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

返回值方面:
1. 如果返回动态分配的对象或内存