交換兩個元素的值,主要有傳指標和傳參考兩種基本方式。這裡需要特別注意:參考一旦定義必須初始化,且綁定後不能改變綁定對象;對象 a 的參考就是 a 的別名。
(1) int &a; // a 是 int 型別的參考 (2) int *a; // a 是 int 型別的指標 (3) int *&a; // a 是 int* 型別的參考,即指標的參考
swap1(int &x, int &y)交換的是數值本身。參考是變數的別名,直接操作原變數。
swap2(int *x, int *y)交換的是指標指向的數值。需解參考操作 *x, *y。
swap3(int *&x, int *&y)交換的是指標本身(即指標變數儲存的位址值)。這會改變指標指向的對象,而非指向對象的值。

可見前兩種方式交換的是數值,第三種方式交換的是指標。
#include <stdio.h>
void swap1(int &x, int &y) {
int temp = x; x = y; y = temp;
}
void swap2(int *x, int *y) {
int temp = *x; *x = *y; *y = temp;
}
void swap3(int *&x, int *&y) {
int *temp = x; x = y; y = temp;
}
int main() {
int a = 10, b = 20;
int *i = &a, *j = &b;
printf("初始: a=%d, b=%d, *i=%d, *j=%d\n", a, b, *i, *j);
swap1(a, b);
printf("swap1後: a=%d, b=%d\n", a, b);
a = 10; b = 20;
swap2(&a, &b);
printf("swap2後: a=%d, b=%d\n", a, b);
a = 10; b = 20;
i = &a; j = &b;
swap3(i, j);
printf("swap3後: *i=%d, *j=%d\n", *i, *j);
return 0;
}

結果與前圖分析完全一致:前兩種交換數值,第三種交換指標指向。