[問題] 使用指標交換內容

看板C_and_CPP (C/C++)作者 (耐綸)時間13年前 (2012/12/06 11:16), 編輯推噓5(5019)
留言24則, 13人參與, 最新討論串1/1
如題,交換變數值為何無法直接用指標指向對方?而是必須像以下 void. swap(int *a int *b){ int temp; temp=*a; *a=*b; *b=*a; } 為何不能直接讓a指向b,b指向a來取代? -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.140.104.82

12/06 11:28, , 1F
你先把a指向b,然後a原先的值跑那去了?
12/06 11:28, 1F

12/06 11:31, , 2F
把a指向b,這時a的位址你就已經遺失了,所以要用temp先記錄
12/06 11:31, 2F

12/06 11:40, , 3F

12/06 11:41, , 4F
直接交換指標其實也是可以。
12/06 11:41, 4F

12/06 12:25, , 5F
寫成 void swap(int **a int **b) 也可以交換指標
12/06 12:25, 5F

12/06 14:23, , 6F
又輪到 a^=b^=a=^=b的時候了 (....)
12/06 14:23, 6F

12/06 14:24, , 7F
噢我沒開玩笑 上面真的相當於swap(a,b)
12/06 14:24, 7F

12/06 14:37, , 8F
不要這樣寫 這是implementation defined behavior
12/06 14:37, 8F

12/06 14:41, , 9F
因為別的地方也可能有指標指到ab指的東西
12/06 14:41, 9F

12/06 14:42, , 10F
換指標和換內容是兩回事
12/06 14:42, 10F

12/06 14:45, , 11F
換指標只影響到你換的兩個指標
12/06 14:45, 11F

12/06 14:45, , 12F
換內容影響到所有指到這個位址的指標
12/06 14:45, 12F

12/06 14:46, , 13F
實際上要用哪個視內容而定
12/06 14:46, 13F

12/06 14:47, , 14F
應該說"視功能需求而定"比較不會跟上面的"內容"搞混
12/06 14:47, 14F

12/06 15:23, , 15F
其實正確寫法是a^=b;b^=a;a^=b; 不過人懶就.... XD
12/06 15:23, 15F

12/06 15:24, , 16F
btw, 上面那個其實是半開玩笑,別這樣寫,會給其他人造
12/06 15:24, 16F

12/06 15:24, , 17F
成很大的困擾的 :3
12/06 15:24, 17F

12/06 15:59, , 18F
你的程式也打錯啦
12/06 15:59, 18F

12/06 19:22, , 19F
如果a和b相等時...XD
12/06 19:22, 19F

12/07 15:01, , 20F
@殺手貓大:可是這樣可以省變數捏XD
12/07 15:01, 20F

12/07 15:04, , 21F
@snaketsai: 可是這樣速度比較慢捏 XD
12/07 15:04, 21F

12/07 17:21, , 22F
這就是炫技啊!
12/07 17:21, 22F

12/08 20:21, , 23F
要不就直接把a代入b,b代入a
12/08 20:21, 23F

07/08 19:19, , 24F
請問James大,函數可傳雙重指標嗎?印象中好像不可
07/08 19:19, 24F
文章代碼(AID): #1Gm0tsFH (C_and_CPP)
文章代碼(AID): #1Gm0tsFH (C_and_CPP)