C语言的传值与传址调用

传值调用并不能改变两个变量的值,而传址能。

为什么,因为,传值调用,仅仅是在函数内,调换参数的值。

而地址所指向的值,改变的不仅仅是函数内,函数外也改变。

请看代码:

这里还要注意:通常我们不会返回局部变量的地址.

C语言的传值与传址调用_局部变量
 1 #include <stdio.h>
 2 
 3 void swap_value(int x,int y)
 4 {
 5     int temp;
 6     temp = x;
 7     x = y;
 8     y = temp;   
 9     printf("传值函数内的输出 %d %d \n",x,y);
10 }
11 
12 void swap_address(int *x,int *y)
13 {
14     int temp;
15     temp = *x;
16     *x = *y;
17     *y=temp;   
18     printf("传址函数内的输出 %d %d \n",*x,*y);
19 }
20 
21 int main(int argc, char *argv[])
22 {
23     int x = 10;
24     int y = 0;
25     
26     printf("x y \n");
27     printf("初值 %d %d \n",x,y);
28     //传值子程序调用(交换xy) 
29     swap_value(x,y);
30     printf("传值函数外调用 %d %d \n",x,y);
31 
32     //传地址字程序调用(交换x,y) 
33     swap_address(&x,&y);
34     printf("传址函数外调用 %d %d \n",x,y);
35     return 0;
36 }
C语言的传值与传址调用_局部变量

传值调用并不能改变两个变量的值,而传址能。

为什么,因为,传值调用,仅仅是在函数内,调换参数的值。

而地址所指向的值,改变的不仅仅是函数内,函数外也改变。

请看代码:

这里还要注意:通常我们不会返回局部变量的地址.

C语言的传值与传址调用_局部变量
 1 #include <stdio.h>
 2 
 3 void swap_value(int x,int y)
 4 {
 5     int temp;
 6     temp = x;
 7     x = y;
 8     y = temp;   
 9     printf("传值函数内的输出 %d %d \n",x,y);
10 }
11 
12 void swap_address(int *x,int *y)
13 {
14     int temp;
15     temp = *x;
16     *x = *y;
17     *y=temp;   
18     printf("传址函数内的输出 %d %d \n",*x,*y);
19 }
20 
21 int main(int argc, char *argv[])
22 {
23     int x = 10;
24     int y = 0;
25     
26     printf("x y \n");
27     printf("初值 %d %d \n",x,y);
28     //传值子程序调用(交换xy) 
29     swap_value(x,y);
30     printf("传值函数外调用 %d %d \n",x,y);
31 
32     //传地址字程序调用(交换x,y) 
33     swap_address(&x,&y);
34     printf("传址函数外调用 %d %d \n",x,y);
35     return 0;
36 }
C语言的传值与传址调用_局部变量