Swap交换函数
父函数调用子函数,子函数如果想要修改父函数的值,必须传指针(地址),子函数内必须要解引用
子函数的改变要想影响到父函数,必须传指针,解引用
1.传指针:相当于走到房间门口,知道房间的确切位置。
2.解引用:相当于打开房门,这可以对房间内部进行改造。
只在子函数中交换了a b的值,但对父函数无影响
void Swap_err1(int a,int b)//必须要传指针
{
int tmp = a;
a = b;
b = tmp;
//printf("%d,%d\n",a,b);//假象
}
交换了p1、p2中保存的地址,但是只影响了地址,对值没影响。
因为主函数中打印 a b 的值时,a b中的值依旧为10 20;只不过是p1 p2中保存的地址发生改变
void Swap_err2(int *p1,int *p2)//传了指针,但是无意义。没有解引用,未跳入父函数中
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针 局部变量,未初始化,随机值
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}
tmp保存p1的值 ,即tmp=10;
p1保存p2的值, 即p1=20;
p2保存tmp的值, 即p2=10;
此时在主函数中,p1与p2地址中保存的数已交换。
void Swap(int *p1,int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
Swap(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}