交換兩個元素的值

交換兩個元素的值,有傳指針和傳引用兩種方式,這裏須要注意的是引用一旦定義必須賦值,一旦賦值不能更改,對象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

相關文章
相關標籤/搜索