作者adrianshum (Alien)
看板C_and_CPP
標題Re: [問題] 副程式更改value
時間Fri Mar 29 08:49:23 2019
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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1553820565.A.B6F.html
※ 編輯: adrianshum (45.64.240.198), 03/29/2019 08:50:43
1F:→ aa0917954358: 之前看過類似這樣做法 不確定是否打對 a ^= b ^= a 03/29 09:35
2F:→ aa0917954358: ^= b; 03/29 09:35
3F:→ adrianshum: 類似。但一行版本在一expression 對同一 variable 重 03/29 09:39
4F:→ adrianshum: 覆賦值應避免,應該是UB 03/29 09:39
5F:推 LPH66: 一行版確實是 implementation-defined, 參見 #1Deo3lyi 03/29 12:10
6F:→ LPH66: 真要寫請寫三條: a^=b; b^=a; a^=b; 03/29 12:10
7F:推 aa0917954358: 瞭解 謝謝! 03/29 12:26
8F:推 s4300026: 用std::swap. XD 03/29 12:33
9F:推 Feis: 印象中 C 語言一行版是 UB 03/29 13:03
10F:推 steve1012: 三個xor沒比較好 直接swap 就行了 03/30 12:50