Re: [問題] swap兩個元素的方法

看板C_and_CPP作者 (noOneKnows)時間12年前 (2012/01/04 23:05), 編輯推噓4(404)
留言8則, 5人參與, 最新討論串3/4 (看更多)
關於整數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

01/04 23:07, , 1F
我那篇文章正是在說明加了括號不會改變情況
01/04 23:07, 1F

01/04 23:08, , 2F
因為問題不在哪個運算子先算而是哪個運算元先"算"
01/04 23:08, 2F

01/04 23:08, , 3F
所以只會改變運算子順序的括號是沒有用的
01/04 23:08, 3F

01/04 23:10, , 4F
懂了!!!感謝!!
01/04 23:10, 4F

01/05 01:27, , 5F
x=x+y; y=x-y; x=x-y;這樣也行阿
01/05 01:27, 5F

01/05 01:30, , 6F
樓上這有嚴重的溢位問題
01/05 01:30, 6F

01/05 02:56, , 7F
假若 x 和 y 都是 2147483647 ,x+y 就悲劇了XD
01/05 02:56, 7F

01/05 11:01, , 8F
好像是耶!!雖然我平常都不會這樣寫啦XD堅持3變數最簡單XD
01/05 11:01, 8F
文章代碼(AID): #1F16gguv (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1F16gguv (C_and_CPP)