交换函数几种方式:
1.void Swap(int a,int b)<<font color="#4d6df3">错误>
{
int tmp;
tmp=a;
a=b;
b=tmp;
}<子函数中的a和b和父函数中的a和b的地址不一样,不能交换父函数中的a和b的值>
2.void Swap(int *a,int *b)<<font color="#4d6df3">错误>
{
int *tmp;
tmp=a;
a=b;
b=tmp;
}<此子函数只是改变了a和b的地址,没有解引用,对a和b的值没有影响,就像两个人拿了两个门的钥匙开门,他们两个人只是交换了钥匙就走了,没有开门,没有达到最终目的。>
3.void Swap(int *a,*b)<<font color="#4d6df3">错误>
{
int *tmp;
*tmp=*a;
*a=*b;
*b=*tmp;
}<此子函数中的*tmp是一个野指针,又称悬挂指针,就和你在函数里面定义一个变量没有初始化一样,程序会崩溃。>
4.void Swap(int *a,int *b)<<font color="#4d6df3">正确>
{
int *tmp;
tmp=*a;
*a=*b;
*b=tmp;
}<此子函数中的既传了指针,又进行了解引用,a跳到tmp中,b跳到a中,b间接访问tmp;tmp中存的a的值,由此改变a和b的值。>
总结:子函数的改变影响父函数(把值带出来)的两个条件:1,传指针,2,解引用