交換兩個元素的值,有傳指針和傳引用兩種方式,這裡需要注意的是引用一旦定義必須賦值,一旦賦值不能更改,對象a的引用就是a的別名(alias)。
(1)int &a;//a是int類型的引用
(2)int *a;//a是int類型的指針
(3)int *&a;//a是int*類型的引用,也就是a是指針的引用
可以用下面示意圖解釋
第一種交換方式,傳遞引用,swap1(int &x, int &y);第二種方式,傳遞指針swap2(int *x, int *y),第三種方式傳遞指針引用swap3(int*(&x), int*(&y))。分別如下所示
可以看到第一、二種方式交換的是數值,第三種方式交換的是指針。
附代碼
#include <stdio.h> swap1( &x, & temp = x = y = swap2( *x, * temp = * *x = * *y = swap3(*(&x), *(& * temp = x = y = a = , b = printf( a = , b = swap2(&a, & printf( a = , b = *i = & *j = & printf( printf(, *i, * printf( printf(, *i, * scanf(, & }
運行結果,與前圖分析的完全相同