关于值传递和地址传递函数
所谓值传递就是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中若是对参数进行修改,将不会影响到实际参数.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