#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內為按值傳遞,按值傳遞時,函式不會訪問當前呼叫的實...