指针传参
(1)传值
1 #include<stdio.h> 2 int main() 3 { 4 int a=1; 5 int b=2; 6 int swap(int x,int y) 7 { 8 int temp; 9 temp=x; 10 x=y; 11 y=temp; 12 } 13 swap(a,b); 14 printf("%d,%d\n",a,b); 15 return 0; 16 } 17
输出的值为:a=1,b=2。我们可以看到,交换数值的目的并没有达到,这是因为函数实现的是形参x和y的交换,并不会影响到实参a和b。
(2)传地址
1 #include<stdio.h> 2 int main() 3 { 4 int a=1; 5 int b=2; 6 void swap(int* x,int* y) 7 { 8 int temp; 9 temp=*x; 10 *x=*y; 11 *y=temp; 12 } 13 swap(&a,&b); 14 printf("%d,%d\n",a,b); 15 return 0; 16 }
输出的值为:a=2,b=1。我们可以看到,交换数值的目的达到了,与上一段代码的区别是本段代码传的参数是变量a,b的地址,通过指针实现了值交换。