Re: [問題] 副程式更改value

看板C_and_CPP作者 (Alien)時間5年前 (2019/03/29 08:49), 5年前編輯推噓5(505)
留言10則, 6人參與, 5年前最新討論串2/2 (看更多)
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

03/29 09:35, 5年前 , 1F
之前看過類似這樣做法 不確定是否打對 a ^= b ^= a
03/29 09:35, 1F

03/29 09:35, 5年前 , 2F
^= b;
03/29 09:35, 2F

03/29 09:39, 5年前 , 3F
類似。但一行版本在一expression 對同一 variable 重
03/29 09:39, 3F

03/29 09:39, 5年前 , 4F
覆賦值應避免,應該是UB
03/29 09:39, 4F

03/29 12:10, 5年前 , 5F
一行版確實是 implementation-defined, 參見 #1Deo3lyi
03/29 12:10, 5F

03/29 12:10, 5年前 , 6F
真要寫請寫三條: a^=b; b^=a; a^=b;
03/29 12:10, 6F

03/29 12:26, 5年前 , 7F
瞭解 謝謝!
03/29 12:26, 7F

03/29 12:33, 5年前 , 8F
用std::swap. XD
03/29 12:33, 8F

03/29 13:03, 5年前 , 9F
印象中 C 語言一行版是 UB
03/29 13:03, 9F

03/30 12:50, 5年前 , 10F
三個xor沒比較好 直接swap 就行了
03/30 12:50, 10F
文章代碼(AID): #1SdMkLjl (C_and_CPP)
文章代碼(AID): #1SdMkLjl (C_and_CPP)