//子函数要想修改父函数的值,必须要①传指针【例代码1】 ②解引用【例代码2】
//但传指针解引用也不一定能成功修改,因为可能有野指针【例代码3】
/*
//【代码1】 :输出结果为 10,20
//【因为没有传指针,则Swap_err1函数中的ab和main函数中的ab并不相等,所以打印的是main函数中未交换的ab值】
#include <stdio.h>
void Swap_err1(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 10;
int b = 20;
Swap_err1(10,20);
printf("%d,%d\n",a,b);
return 0;
}
*/
/*
//【代码2】 :输出结果为 10,20
//有传指针但没有解引用
#include <stdio.h>
void Swap_err2(int *p1,int *p2)
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
int main()
{
int p1 = 10;
int p2 = 20;
Swap_err2(&p1,&p2);
printf("%d,%d\n",p1,p2);
return 0;
}
*/
/*
//【代码3】 :编译失败
//传指针解引用但有野指针*tmp,野指针则访问不了
#include <stdio.h>
void Swap_err3(int *p1,int *p2)
{
int *tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}
int main()
{
int p1 = 10;
int p2 = 20;
Swap_err3(&p1,&p2);
printf("%d,%d\n",p1,p2);
return 0;
}
*/
//【正确】:输出结果为 20,10
//相当于int *a=&p1; *a=p1=10
#include <stdio.h>
void Swap(int *p1,int *p2) //Swap_err2(int *a,int *b)
{
int tmp = *p1; //tmp = *a
*p1 = *p2; //*a = *b;
*p2 = tmp; //*b = tmp;
}
int main()
{
int p1 = 10;
int p2 = 20;
Swap(&p1,&p2);
printf("%d,%d\n",p1,p2);
return 0;
}