指针里面的值存放的是另一个参数的地址,需要"解引用",也就是用*来取该参数的值,而引用实际上就是另一个参数的别名,这个引用的地址和另一个参数的地址实际上是一样的,代码如下:
//Pointer
#include<iostream>
using namespace std;
void swap(int* x, int* y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a, b;
cin >> a >> b;
cout << "Before Swap: a = " << a << " " << "b = " << b << endl;
cout << "Before Swap : a = " << a << " " << "b = " << b << endl;
swap(&a, &b);
cout << "After Swap: a = " << a << " " << "b = " << b << endl;
cout << "After Swap : a = " << a << " " << "b = " << b << endl;
return 0;
}

可以看到,这里面x的值实际上就是实参a的地址,进行交换后

直接就将实参a的值改成6,这里a没有变化的原因是没有点右边的更新,实际上实参a根本就不在swap函数里面,更新之后是下面的样子:

引用的代码如下:
//Reference
#include<iostream>
using namespace std;
void swap(int& x, int& y)
{
int temp;
temp = x;
x = y;
y = temp;
}
int main()
{
int a, b;
cin >> a >> b;
cout << "Before Swap: a = " << a << " " << "b = " << b << endl;
cout << "Before Swap : a = " << a << " " << "b = " << b << endl;
swap(a, b);
cout << "After Swap: a = " << a << " " << "b = " << b << endl;
cout << "After Swap : a = " << a << " " << "b = " << b << endl;
return 0;
}
在引用中形参x的地址和值和实参a一模一样

交换之后,发现形参x的地址和值和实参a还是一样的:

原文:https://www.cnblogs.com/K2MnO4/p/13091753.html