关于值传递和地址传递

关于值传递和地址传递函数

所谓值传递就是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中若是对参数进行修改,将不会影响到实际参数.spa

而地址传递是直接把变量的地址传递给函数,这时函数是直接对原来的变量进行操做的.指针

 1 #include<stdio.h>
 2 void Swap1(int x, int y) //值传递函数
 3 {
 4     int tmp = x;
 5     x = y;
 6     y = tmp;
 7     return;
 8 }
 9 void Swap2(int* x, int* y) //地址传递函数
10 {    
11     int tmp = *x;
12     *x = *y;
13     *y = tmp;
14     return;
15 }
16 int main()
17 {
18     int a = 10;
19     int b = 100;
20     Swap1(a, b);
21     printf("a = %d,b = %d \n", a, b);
22     Swap2(&a, &b);
23     printf("a = %d,b = %d \n", a, b);
24     return 0;
25 }

运行结果:code

能够发现第一个交换函数,并未交换变量a,b的值,而第二个交换函数交换了a,b的值,只是由于在函数运行到Swap1函数时,把实参b,a 的值依次传给形参y,x,在函数Swap1内形参x,y的值虽然交换了,可是并不能影响实参啊a,b的值.blog

而在交换函数Swap2中,是将吧b,a的地址传递给了形参 y,  x, 此时*x,*y就是指向的实参a,b,对*x,*y的赋值操做,就是对指针x,y所指向的a,b进行间接操做,因此能够影响到实参a, b.io

总结: 在写代码或检查代码时要注意向形参传递的是地址仍是数值.二者产生的结果彻底不一样.class

相关文章
相关标签/搜索