指针的调用—交换两个数值
一、子函数(被调用函数)的改变要想修改父函数(调用函数)的值需要:
1.传指针
2.解引用
二、代码的实现过程
错误一:
void swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int a=10;
int b=20;
swap(a,b);
printf("%d,\n%d",a,b);
}
错误分析:这里既没有传地址,又没有解引用。主函数a与b的地址与swap函数中a与b的地址不同,故不能交换主函数中a与b的值
错误二:
void swap(int *p1,int *p2)
{
int *tmp=p1;
p1=p2;
p2=tmp;
}
int main()
{
int a=10;
int b=20;
swap(&a,&b);
printf("%d,\n%d",a,b);
}
错误分析:这里只进行了指针的传递,却没有解引用,也就是说指针p1与p2没有得到所指的变量,只是得到了变量a与b的地址,所以没有变换成功。
错误三:
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,\n%d",a,b);
}
错误分析:这里是进行了传指针和解引用,但是swap函数中的tmp是个野指针(悬挂指针),也就是指针tmp没有所指的变量。
正确的代码:
void swap(int *p1,int *p2)//传指针;
{
int tmp=*p1;
*p1=*p2;//解引用;
*p2=tmp;
}
int main()
{
int a=10;
int b=20;
swap(&a,&b);
printf("%d,%d",a,b);
}