talk is cheap, show me the code.
所以我们直接上代码看区别:
#include <iostream>
using namespace std;
void swap1(int &a, int &b) {
int temp = a;
a = b;
b= temp;
}
void swap2(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void swap3(int *a, int *b) {
int *temp = a;
a = b;
b = temp;
}
int main() {
int a = 1;
int b = 2;
swap1(a, b);
cout << "a = " << a << ", b = " << b << endl;
int c = 3;
int d = 4;
int *p = &c;
int *q = &d;
swap2(p, q);
cout << "c = " << c << ", d = " << d << endl;
cout << "*p = " << *p << ", *q = " << *q << endl;
int e = 5;
int f = 6;
int *m = &e;
int *n = &f;
swap3(m, n);
cout << "e = " << e << ", f = " << f << endl;
cout << "*m = " << *m << ", *n = " << *n << endl;
}
这个程序的3个swap函数,分别是引用传递,指针传递和指针传递。
其中swap2和swap3的区别是:前者对指针指向的实际变量进行操作,而后者是对实际变量的副本进行的操作。
打印结果如下:
a = 2, b = 1
c = 4, d = 3
*p = 4, *q = 3
e = 5, f = 6
*m = 5, *n = 6
可以看到swap1和swap2成功的交换了变量的值,但swap3没有交换变量值。
从这个例子可以看出,引用传递和指针传递都可以修改变量的值,但是在指针传递的时候,需要用解引用符*来对变量进行操作才行,不然操作的就是副本。