c++中几种swap

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

原文链接: https://www.cnblogs.com/zzzlight/p/12542213.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194628

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午6:44
下一篇 2023年2月12日 下午6:45

相关推荐