第一段标题

交换两个元素的值

交换两个元素的值,有传指针和传引用两种方式,这里需要注意的是引用一旦定义必须赋值,一旦赋值不能更改,对象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))。分别如下所示

                

可以看到第一、二种方式交换的是数值,第三种方式交换的是指针。

附代码

 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 }

运行结果,与前图分析的完全相同

 

posted @ 2014-03-03 10:33  小雨淅淅  阅读(1632)  评论(0编辑  收藏  举报