两种&

C++中&有两种含义:
        1)、取地址,例如:int* p = &a;
        2)、引用,例如:int& b = a。

取地址时,&是一个一元运算符,返回的是操作数存放在内存中的起始位置(对于32位操作系统,是一个8位的十六进制数);

引用时,它实际上就是被引用的变量,使用的是同一段内存地址内的数据,只是重新赋予了一个名字。在2)的例中,无论是b++还是a++,a和b两个值都会发生变化。对a和b取地址,会发现它们完全一样,&a == &b is true。

在函数定义时,2)中的&会很有用。

例如,写一个函数用来交换两个int变量的值:
void exchange(int &a, int &b)
{
        int tmp = a;
        a = b;
        b = tmp;
}
void main()
{
        int x =1, y = 2;
        exchange(x,y);
        return 0;
}
假如,参数列表以(int a, int b)的形式,其结果,在exchange函数体中,a和b交换了值,但main中,x仍然是1,y仍然是2。

&同样能用在函数返回值,例如
int& max(int &a, int &b)
{
        return a>b?a:b;
}
void main()
{
        int x=1, y=2;
        max(x,y) ++ ;
        return 0;
}
运行结果,会发现y变成了3。因为max函数返回的是对大数的一个引用,也即是返回的就是y本身。在这个例子当中,去掉返回值限定中和形参表中的任何一个&都不能达成y+1的效果。

原文地址:https://www.cnblogs.com/mumuliang/p/1873575.html