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

作者: adrianshum (Alien)   2019-03-29 08:49:23
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 之類我就不談了)
作者: aa0917954358 (Doem)   2019-03-29 09:35:00
之前看過類似這樣做法 不確定是否打對 a ^= b ^= a^= b;
作者: adrianshum (Alien)   2019-03-29 09:39:00
類似。但一行版本在一expression 對同一 variable 重覆賦值應避免,應該是UB
作者: LPH66 (-6.2598534e+18f)   2019-03-29 12:10:00
一行版確實是 implementation-defined, 參見 #1Deo3lyi真要寫請寫三條: a^=b; b^=a; a^=b;
作者: aa0917954358 (Doem)   2019-03-29 12:26:00
瞭解 謝謝!
作者: s4300026 (s4300026)   2019-03-29 12:33:00
用std::swap. XD
作者: Feis (永遠睡不著 @@)   2019-03-29 13:03:00
印象中 C 語言一行版是 UB
作者: steve1012 (steve)   2019-03-30 12:50:00
三個xor沒比較好 直接swap 就行了

Links booklink

Contact Us: admin [ a t ] ucptt.com