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 *&類型,此時交換即可正常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM