#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]),数组名就是地址,所以没事。
而且人家函数是按引用接收,不是让你非得传引用过去