&符号在c++中有多个意义。估计你是将引用符号和取地址操作符弄混了。
举个栗子:
char ch = ‘A’;
char * pch = &ch; //这里的&就是取地址操作符,用来获取变量ch的地址
char & refch = A; //这里的&是引用类型的标识。
再看函数调用
从经典的swap函数来看
int swap(int , int); //这个基本没什么卵用,达不到目的
int swap(int *, int *); //这个就是地址传递,会修改实参所指向地址的值
int swap(int &, int &); //这个是引用传递,调用的时候最直观,修改实参的值
上边三个函数,如果第一个和第三个同时存在,调用的时候是会报错的。
追问我不明白为什么函数声明处和被调用函数是三个指针,而开始调用处是两个&?
追答看看三个函数的调用
int a = 10, b = 100;
//int swap(int, int)
swap(a, b); //执行完毕后,a = 10, b = 100;
//int swap(int*, int *)
swap(&a, &b); //这里的&是取地址符号整个调用过程可以细化一下
{
int * x = &a; //通过取地址符&获取变量的地址
int * y = &b;
cout << "x = " << x << endl
<< "y = " << y << endl
<< "a = " << a << endl
<< "b = " << b<< endl;
swap(x, y); //实际传入的参数是整形指针变量。执行完毕后,x, y 不变,
//实际改变的是a, b;
cout << "x = " << x << endl
<< "y = " << y << endl
<< "a = " << a << endl
<< "b = " << b<< endl;
}
// int swap (int&, int&)
swap(a, b) ; //执行完毕后, a,b的值改变。之际的调用过程是这样的
{
int &x = a; //这里的&是引用标识符
int &y = b;
swap(x, y); //实际传入的是a, b的引用
//同样可以将执行前后的 值都打印出来看看
}
本回答被网友采纳