在c与c++中,有多种办法可以通过函数交换传入的两数的值,但有容易有一些问题产生,因而本文将几种交换方式及容易出错的点进行了分类。
1.传引用
这是c++中最常见方式
如下:
int swap1 (int &a,int &b)
{
int c;
c=a;
a=b;
b=c;
cout<<"a1:"<<a<<";b1:"<<b<<endl;
}
2.传指针
int swap2 (int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
cout<<"a2:"<<*a<<";b2:"<<*b<<endl;
}
以上是两种正确而常用的办法。然而使用中也会有一些错误的使用,具体如下:
3.传指针但是使用出错,只交换了地址。
int swap3 (int *a,int *b)
{
int *c;
c=a;
a=b;
b=c;
cout<<"a3:"<<*a<<";b3:"<<*b<<endl;
}
这里实际输出后,会发现传入的值并未发生交换,这是因为实际上此处的交换是指针的交换,即将a、b的地址值进行的交换而不是a和b本身的值,最后用*得到指针所指的值仍然是原顺序,当然指向a的指针的地址发生了交换,但是最终用这个交换的指针取值还是原a值。
4.常见错误,即未将函数中局部变量与传入的原变量区分清楚。
int swap4 (int a,int b)
{
int c;
c=a;
a=b;
b=c;
cout<<"a4:"<<a<<";b4:"<<b<<endl;
}
5.修改3发生的错误后,此为正确交换
int swap5 (int *&a,int *&b)
{
int *c;
c=a;
a=b;
b=c;
cout<<"a5:"<<*a<<";b5:"<<*b<<endl;
}
这里将传入的变量换成了int *&类型,此时交换即可正常。