看板 C_and_CPP 關於我們 聯絡資訊
關於整數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