当函数需要用形参改变实参时,简单的传值不能解觉问题。这时就需要使用指针解决问题。
例:int a=10;b=20;要求写一个函数将a,b的值互换。
错误代码:
1.
//交换失败,原因a,b仅仅只是赋值,main中的a和Swap中的a不是同一个变量
void Swap_err(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
}
//交换失败,只是交换形参的指向(交换钥匙),没有解引用
void Swap_err2(int *p1,int *p2)
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
void Swap_err3(int *p1,int *p2)
{
int *tmp;//野指针,悬挂指针,tmp是个局部变量,默认值为随机值
*tmp = *p1;//*tmp崩溃,野指针不能访问
*p1 = *p2;
*p2 = *tmp;
}
正确代码:
void Swap(int *p1, int *p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("%d,%d\n", a, b);
Swap(&a, &b);
printf("%d,%d\n", a, b);
return 0;
}
运行结果: