子函数的改变要想影响父函数的数据必须传指针和解引用。
主函数:
int main()
{
int a = 10;
int b = 20;
Swap(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}在这里插入代码片
错误一:
此子函数里的形参(a,b)和主函数里的不可混为一谈。
void Swap_err1(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
}
错误二:
在这里只是交换了a和b的地址,a和b的值并未被交换。
void Swap_err2(int *p1,int *p2)//错误
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
错误三:
此函数里的tmp为野指针,给野指针赋值时会发生崩溃。
野指针:也称为悬挂指针,你没有访问权限的地址(指针),这个指针有可能不存在也有可能存在但是你不能访问
野指针很麻烦,不好判断(错误的电话号码)
1.地址不存在(电话号少一位)
2.地址存在但是不能访问(电话号写成别人)
3.地址之前可以访问,但现在不可以(更换电话号码,我却给你之前的号码打电话)
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针(悬挂指针)
*tmp = *p1;//崩溃
*p1 = *p2;
*p2 = *tmp;
}
正确写法:
void Swap(int *p1,int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}