C學習 swap函式的多種實現對比

2021-07-23 02:50:56 字數 1192 閱讀 9407

#include #include void swap0( int a, int b);//交換函式

void swap1( int *a, int *b);

void swap2( int *a, int *b);

void swap3( int *a, int *b);

void swap4( int *a, int *b);

void swap5( int *a, int *b);

int main()

/*不能交換,

形參傳值,實際傳過去是拷貝的乙份,沒改變主函式中x,y

是值傳遞:是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。*/

void swap0( int a, int b)

/*不能交換

因為形參是指標,所以函式呼叫要傳遞變數的位址

函式swap1(&a,&b),形參傳遞的是的a、b的位址,

函式交換了位址。但是位址裡儲存什麼內容沒有變。

對於main中的a,b值,a是所宣告的位址命名,所以a的實際內容也沒有變*/

void swap1( int *a, int *b)

/*能交換

位址指向的內容進行了交換

*/void swap2( int *a, int *b)

/*能交換

用^是位異或運算,同為0或者同為1時,對應位結果為0;否則為1

不使用多餘空間

最優演算法。適合各種情況*/

void swap3( int *a, int *b)

printf("swap3內,交換後:a:%d,b:%d\n",*a,*b);

}/*能交換

用+-運算

不使用多餘空間

缺點:a、b同號時會溢位。改進:swap5、swap3*/

void swap4( int *a, int *b)

printf("swap4內,交換後:a:%d,b:%d\n",*a,*b);

}/*能交換

用+-運算

不使用多餘空間

缺點:a、b異號時會溢位。改進:swap4、swap3*/

void swap5( int *a, int *b)

printf("swap5內,交換後:a:%d,b:%d\n",*a,*b);

}

Swap函式的實現

一 資料沒有 真正的被交換 include include includeusing namespace std void sswap int,int int main int x 3 int y 5 sswap x,y int a x int b y cout x 二 資料 真正的被交換 使用指標...

swap函式的實現方式

預設版本 namespace std 如果類採用指標儲存資料,則預設交換方式會變得低效。因為只用交換兩個指標便能實現兩個物件的交換。因此需要特化版本的swap,由於指標是私有成員,因此需要乙個公有成員函式swap,完成實際的交換。然後由特化版本的swap呼叫該公有成員函式。我們不能修改namespa...

C 學習筆記(二) 交換函式(swap)

這次我們要透過乙個簡單的函式swap深入理解函式傳參的本質以及在c 中如何選擇傳參方式。先來看第一段程式 void swap int x,int y 通過main函式的呼叫,我們發現x,y並未實現交換 int main 原因是整形x和y在函式swap內為按值傳遞,按值傳遞時,函式不會訪問當前呼叫的實...