看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 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: 140.116.39.115
yuanyu90221:應該該還有 用傳址方式的寫法吧 ?? 04/27 15:35
yuanyu90221:你的問題應該是scope的問題吧 04/27 15:36
yuanyu90221:因為是call by value 所以 原本的變數內容並不會改變 04/27 15:39
yuanyu90221:如果不傳址 只是將兩個傳入的值 放入local 變數交換值 04/27 15:41
VictorTom:偷推自己的文 #1A5iL3A- (C_and_CPP) ....XD 04/27 15:52
yuanyu90221:6F的文章真是詳細爬文才發現XD 04/27 16:27
applecool:#define SWAP(x,y) {x^=(y^=(x^=y));} 04/27 17:43
knuckles:也來偷推一下自己的文 XD http://disp.cc/b/11-Lw 04/27 17:44
VictorTom:applecool 那個如果傳了x與y是同一變數就....XD 04/27 17:48
VictorTom:k大的網頁好炫....XD 04/27 17:55
applecool:?? 04/27 18:00
applecool:同一變數為何要swap? 04/27 18:03
VictorTom:曾經寫迴圈這麼玩的時候不小心這麼SWAP了array的同一個 04/27 18:09
VictorTom:element, 然後debug半天才找到為什麼被swap成0....Orz 04/27 18:10
VictorTom:只是hint一下可能有意料之外的side effect....XD 04/27 18:11
VictorTom:又, 如果swap的對象是pointer, 而同樣的資料的pointer 04/27 18:12
VictorTom:會指到同一位址的時候, 也會被這個side effect影響到:) 04/27 18:12
applecool:有道理 04/27 18:13
applecool:受教了 那不如使用 04/27 18:16
applecool:#define SWAP(x,y) {int t=y; y=x; x=t;} 04/27 18:16
applecool:謝謝 V 大 :-) 04/27 18:18
applecool:我也好想請教K大的網頁是怎麼做的 ^^ 謝謝 04/27 18:19
VictorTom:如果x,y不是int會....XD 04/27 18:30
applecool:那直接複製記憶體吧~~ 04/27 18:34
applecool:memcpy 或 memmove 04/27 18:37
knuckles:喔喔 那是我做的仿BBS網站啊 每頁加個換頁符號^L就行了 04/28 02:46
applecool:C++ std::swap 05/07 11:48
applecool:更正: #define SWAP(x,y) {x^=(y^=(x^=y));} 是不正確的 01/05 23:58
applecool:跟上面一樣是更正啟示: 記憶體複製的手法也不完全正確 01/06 00:02