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】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    c++中几种swap

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

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

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

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

(0)
上一篇 2023年3月1日 下午10:44
下一篇 2023年3月1日 下午10:44

相关推荐