引用和指针做形参时的区别
引用和指针做形参是很常见的问题,但是它们在做参数的时候是有区别的。先说一下指针吧,指针他是一个变量,有具体的值,他的值是一个地址(非const)。
而引用是对一个变量的引用,是变量的别名,并且在引用的时候必须要初始化。举个例子吧:
int a=2;
int &b=a; // b是对a的引用,a、b是同一个内存单元,即a和b的值都是2,b就相当于是a的一个别名,改变b的值a也会发生改变,改变a的值b也会发生改变,例如
b=10; 当系统执行了这条语句后,a和b的值就都变成了10;
a=-5; 当系统执行了这条语句后,a和b的值就都变成-5。 因为a和b具有同一个内存空间,所以不管改变哪一个的值,另一个也会跟着发生改变,可以理解为一个
人他可以有两个名字,他既可以叫 张三,也能叫李四,但不管是哪个名字,其实说的是一个人。然后说一下引用和指针做形参时的具体用法吧,举下面这个例子:
void swap(int &pa,int *pb)
{
}
int main()
{
int a,*b;
swap(a,b)
}
在主函数中调用swap()时,指针和引用做形参就是上面的形式。当用指针或者引用做形参来改变主函数中变量的值得时候,指针是值传递,传递的是指针变量b的值;而
引用是址传递,传递的是变量a的地址。另外还有一点要知道,指针做形参,传递指针的时候,会产生一个临时的指针变量,需要分配额外的内存空间;但是传引用的话
则不会,所以传引用效率更高,也比指针更安全。