交換兩個元素的值,有傳指針和傳引用兩種方式,這裏須要注意的是引用一旦定義必須賦值,一旦賦值不能更改,對象a的引用就是a的別名(alias)。spa
(1)int &a;//a是int類型的引用指針
(2)int *a;//a是int類型的指針code
(3)int *&a;//a是int*類型的引用,也就是a是指針的引用對象
能夠用下面示意圖解釋blog
第一種交換方式,傳遞引用,swap1(int &x, int &y);第二種方式,傳遞指針swap2(int *x, int *y),第三種方式傳遞指針引用swap3(int*(&x), int*(&y))。分別以下所示io
能夠看到第1、二種方式交換的是數值,第三種方式交換的是指針。class
附代碼引用
1 #include <stdio.h> 2 3 4 void swap1(int &x, int &y) 5 { 6 int temp = x; 7 x = y; 8 y = temp; 9 } 10 11 void swap2(int *x, int *y) 12 { 13 int temp; 14 temp = *x; 15 *x = *y; 16 *y = temp; 17 } 18 19 void swap3(int*(&x), int*(&y)) 20 { 21 int *temp; 22 temp = x; 23 x = y; 24 y = temp; 25 } 26 27 int main() 28 { 29 int a = 1, b = 2; 30 swap1(a, b); 31 printf("傳入引用,a = %d, b = %d\n", a, b); 32 a = 1, b = 2; 33 swap2(&a, &b); 34 printf("傳入指針,a = %d, b = %d\n", a, b); 35 a = 1, b = 2; 36 int *i = &a; 37 int *j = &b; 38 printf("傳入指針引用前,a = %d, b = %d\n", a, b); 39 printf("傳入指針引用前,i = %d, i = %d\n", *i, *j); 40 swap3(i, j); 41 printf("傳入指針引用後,a = %d, b = %d\n", a, b); 42 printf("傳入指針引用後,i = %d, i = %d\n", *i, *j); 43 44 scanf("%d", &a); 45 return 0; 46 }
運行結果,與前圖分析的徹底相同im