在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 *&类型,此时交换即可正常。