传值调用并不能改变两个变量的值,而传址能。
为什么,因为,传值调用,仅仅是在函数内,调换参数的值。
而地址所指向的值,改变的不仅仅是函数内,函数外也改变。
请看代码:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void swap1(int x,int y)
5 {
6 int temp;
7
8 temp=x;
9 x=y;
10 y=temp;
11 printf("传值函数内的输出 %d %d \n",x,y);
12 }
13
14 void swap2(int *x,int *y)
15 {
16 int temp;
17 temp = *x;
18 *x = *y;
19 *y=temp;
20 printf("传址函数内的输出 %d %d \n",*x,*y);
21 }
22
23 int main(int argc, char *argv[])
24 {
25 int x = 10;
26 int y = 0;
27
28 printf("x y \n");
29 printf("初值 %d %d \n",x,y);
30 //传值子程序调用(交换xy)
31 swap1(x,y);
32 printf("传值函数外调用 %d %d \n",x,y);
33
34 //传地址字程序调用(交换x,y)
35 swap2(&x,&y);
36 printf("传址函数外调用 %d %d \n",x,y);
37 system("PAUSE");
38 return 0;
39 }
40
2 #include <stdlib.h>
3
4 void swap1(int x,int y)
5 {
6 int temp;
7
8 temp=x;
9 x=y;
10 y=temp;
11 printf("传值函数内的输出 %d %d \n",x,y);
12 }
13
14 void swap2(int *x,int *y)
15 {
16 int temp;
17 temp = *x;
18 *x = *y;
19 *y=temp;
20 printf("传址函数内的输出 %d %d \n",*x,*y);
21 }
22
23 int main(int argc, char *argv[])
24 {
25 int x = 10;
26 int y = 0;
27
28 printf("x y \n");
29 printf("初值 %d %d \n",x,y);
30 //传值子程序调用(交换xy)
31 swap1(x,y);
32 printf("传值函数外调用 %d %d \n",x,y);
33
34 //传地址字程序调用(交换x,y)
35 swap2(&x,&y);
36 printf("传址函数外调用 %d %d \n",x,y);
37 system("PAUSE");
38 return 0;
39 }
40