c语言中数值交换用值传递和地址传递
1:值传递,并未实现真正的交换
void Swap(int a,int b)//这里a,b的地址与主函数的地址不同,仅仅是函数名相同 { int tmp = a; a = b; b = tmp; } int main() { int a=5; int b=10; Swap(a,b);//a还是5,b还是10 return 0; }
2:地址传递,但交换的是指针指向,a,b并未实现交换
#include"stdio.h" void Swap(int *p1,int *p2)//传入的是a,b的地址,此时p1指向的是a,p2指向的是b; { int *tmp = p1;//p1的指向地址赋值tmp p1 = p2; p2 = tmp;//p1,p2指向地址发生交换 }//可是a,b的值并未发生交换 int main() { int a=5; int b=10; Swap(&a,&b); return 0; }
3:传递地址,交换地址从而达到值交换
#include"stdio.h" void Swap(int *p1,int *p2)//传入地址 { int tmp; tmp = *p1; //a,b地址发生交换 *p1 = *p2; *p2 = tmp; } int main() { int a=5; int b=10; Swap(&a,&b); return 0; }
4:传入地址,交换指向的另一种写法
#include"stdio.h" void Swap(int *p1,int *p2) { int *tmp;//交换 的 是指针指向 tmp = p1; p1 = p2; p2 = tmp; }//出了门就不认识了 int main() { int a=5; int b=10; int *p=&a,*q=&b; Swap(p,q);//传入的依然是地址 return 0; }