看板 C_and_CPP 關於我們 聯絡資訊
C++ 的話就pass by reference: void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int x,y; //... swap(x,y); C 的話一是傳address: void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int x,y; //... swap(&x, &y); 一是寫macro (不建議, 後面的隨便寫,會有不少問題,看看就好) #define SWAP(a,b) { \ int temp=a; a = b; b = temp; } int x,y; //... SWAP(x,y); (至於應該將會有人提到的如何不靠 temp 做 Swap 之類我就不談了) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 45.64.240.198 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1553820565.A.B6F.html ※ 編輯: adrianshum (45.64.240.198), 03/29/2019 08:50:43
aa0917954358: 之前看過類似這樣做法 不確定是否打對 a ^= b ^= a 03/29 09:35
aa0917954358: ^= b; 03/29 09:35
adrianshum: 類似。但一行版本在一expression 對同一 variable 重 03/29 09:39
adrianshum: 覆賦值應避免,應該是UB 03/29 09:39
LPH66: 一行版確實是 implementation-defined, 參見 #1Deo3lyi 03/29 12:10
LPH66: 真要寫請寫三條: a^=b; b^=a; a^=b; 03/29 12:10
aa0917954358: 瞭解 謝謝! 03/29 12:26
s4300026: 用std::swap. XD 03/29 12:33
Feis: 印象中 C 語言一行版是 UB 03/29 13:03
steve1012: 三個xor沒比較好 直接swap 就行了 03/30 12:50