在c语言中利用函数Swap进行数值交换
1.
void Swap(int a,int b)
{
int tmp=a;
a=b;
b=tmp;
}
int main()
{
int a=10;
int b=20;
printf("交换前:a=%d,b=%d",a,b);
Swap(a,b);
printf("交换后:a=%d,b=%d",a,b);
return 0;
}
运行结果为:
上面程序运行未成功的原因为:
把a,b的值传给函数Swap,只是将形式参数改变,a,b所对应的地址不变,即a,b的实参并没有改变。
2.
void Swap(int* p1,int* p2)
{
int* tmp=p1;
p1=p2;
p2=tmp;
}
int main()
{
int a=10;
int b=20;
printf("交换前:a=%d,b=%d'',a,b);
Swap(a,b);
printf("交换后:a=%d,b=%d",a,b);
return 0;
}
运行结果为:
上面程序运行未成功的原因为:
没有进行解引用访问a,b的值,没有进行交换。
3.
void Swap(int* p1,int* p2)
{
int* tmp;//野指针
*tmp=*p1;
*p1=*p2;
*p2=*tmp;
}
int main()
{
int a=10;
int b=20;
printf("交换前:a=%d,b=%d'',a,b);
Swap(&a,&b);
printf("交换后:a=%d,b=%d'',a,b);
return 0;
}
程序编译出错,老的编译器(vs2012,DEVC++,VC6.0等)程序能运行但在*tmp=*p1;这句崩溃。
野指针:也称悬空指针,悬挂指针,你没有访问权限的地址(指针)。
4.
void Swap(int* p1,int* p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
int main()
{
int a=10;
int b=20;
printf("交换前:a=%d,b=%d'',a,b);
Swap(&a,&b);
printf("交换后:a=%d,b=%d'',a,b);
return 0;
}
程序正确,运行成功:
结论:
重点:调用函数通过形参想修改实参的值,必须1,传指针;2.解引用。