关于值传递和指针传递
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 }
运行结果:
可以发现第一个交换函数,并未交换变量a,b的值,而第二个交换函数交换了a,b的值,只是因为在函数运行到Swap1函数时,把实参b,a 的值依次传给形参y,x,在函数Swap1内形参x,y的值虽然交换了,但是并不能影响实参啊a,b的值.
而在交换函数Swap2中,是将吧b,a的地址传递给了形参 y, x, 此时*x,*y就是指向的实参a,b,对*x,*y的赋值操作,就是对指针x,y所指向的a,b进行间接操作,所以可以影响到实参a, b.
总结: 在写代码或检查代码时要注意向形参传递的是地址还是数值.两者产生的结果完全不同.