作者applecool (noOneKnows)
看板C_and_CPP
標題Re: [問題] swap兩個元素的方法
時間Wed Jan 4 23:05:12 2012
關於整數swap,根據置底的文章誡條,看來
x^=y^=x^=y; 的寫法是不可以的。
那請問加上括號寫成 x ^= ( y ^= ( x ^= y ) );
依然有運算元一樣,是不是也是錯誤呢?
看來只要運算元不一樣就OK
拜讀了版上高手文章
"4/11 LPH66 R: [問題] 請教如何只用x,y兩變數來交換彼此數值"
不知道加了括號會不會改變情況?(好像不會)
雖然實際上我都用 std::swap,
還是想請教各位一下,
感恩啊!
※ 引述《nana0130 (小那)》之銘言:
: 遇到的問題: (題意請描述清楚)
: swap 兩個數值
: 可以這樣寫
: void swap(int *a, int *b) //交換a跟b指向位置的值
: {
: int temp;
: temp = *a;
: *a = *b;
: *b = temp;
: }
: 還有什麼別的方法嗎 ?
: 為什麼不能傳值到function 裡面去作交換
: void swap(int a, int b) //交換a跟b指向位置的值
: {
: int temp;
: temp = a;
: a = b;
: b = temp;
: }
: 我試的結果是 swap裡面 是交換了
: 但是回去 main 之後,卻仍沒交換~~
: 這是為什麼?
: 為什麼 一定要用傳位址~~
: 希望得到的正確結果:
: 程式跑出來的錯誤結果:
: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: 有問題的code: (請善用置底文標色功能)
: 補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.143.76
推 LPH66:我那篇文章正是在說明加了括號不會改變情況 01/04 23:07
→ LPH66:因為問題不在哪個運算子先算而是哪個運算元先"算" 01/04 23:08
→ LPH66:所以只會改變運算子順序的括號是沒有用的 01/04 23:08
→ applecool:懂了!!!感謝!! 01/04 23:10
推 flere:x=x+y; y=x-y; x=x-y;這樣也行阿 01/05 01:27
→ firejox:樓上這有嚴重的溢位問題 01/05 01:30
推 xatier:假若 x 和 y 都是 2147483647 ,x+y 就悲劇了XD 01/05 02:56
推 flere:好像是耶!!雖然我平常都不會這樣寫啦XD堅持3變數最簡單XD 01/05 11:01