c++有关引用的不理解


#include <iostream>

using namespace std;

const int N = 1e5+10;

void f(int x,int y,int a[])
{   
   swap (a[x],a[y]);
}

int main()
{
    int a[N]={1,2,3};
    f(0,1,a);
    cout<<a[0]<<" "<<a[1];
    return 0;
}

为啥这里不用传引用&就能实现交换?之前不是说必须得引用传递才能修改传入的参数吗?

这里是数组啊,属于本身就是一连串的地址,数组和指针相似,只不过数组是有明确大小。所以用数组不需要用指针

你定义的f()函数的第三个参数传入的是数组,其实代表的意思和指针类似,就是代表在这里需要传入一个地址
再来看看引用
&a 不就相当于是取a的地址吗
如果把第三个参数换成 &a ,其实代表的意思一样,都是想告诉编程者这里需要传入的是一个地址
对地址进行操作,显然可以交换地址上的值

模板特化,你这个调用的是void swap(_Ty (&_Left)[_Size], _Ty (&_Right)[_Size]),数组名就是地址,所以没事。

而且人家函数是按引用接收,不是让你非得传引用过去