看板 C_and_CPP 關於我們 聯絡資訊
如題,交換變數值為何無法直接用指標指向對方?而是必須像以下 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
diabloevagto:你先把a指向b,然後a原先的值跑那去了? 12/06 11:28
tyc5116:把a指向b,這時a的位址你就已經遺失了,所以要用temp先記錄 12/06 11:31
linotwo:http://codepad.org/kV1FtsQ1 12/06 11:40
linotwo:直接交換指標其實也是可以。 12/06 11:41
james732:寫成 void swap(int **a int **b) 也可以交換指標 12/06 12:25
Killercat:又輪到 a^=b^=a=^=b的時候了 (....) 12/06 14:23
Killercat:噢我沒開玩笑 上面真的相當於swap(a,b) 12/06 14:24
littleshan:不要這樣寫 這是implementation defined behavior 12/06 14:37
azureblaze:因為別的地方也可能有指標指到ab指的東西 12/06 14:41
azureblaze:換指標和換內容是兩回事 12/06 14:42
azureblaze:換指標只影響到你換的兩個指標 12/06 14:45
azureblaze:換內容影響到所有指到這個位址的指標 12/06 14:45
azureblaze:實際上要用哪個視內容而定 12/06 14:46
azureblaze:應該說"視功能需求而定"比較不會跟上面的"內容"搞混 12/06 14:47
Killercat:其實正確寫法是a^=b;b^=a;a^=b; 不過人懶就.... XD 12/06 15:23
Killercat:btw, 上面那個其實是半開玩笑,別這樣寫,會給其他人造 12/06 15:24
Killercat:成很大的困擾的 :3 12/06 15:24
leiyan:你的程式也打錯啦 12/06 15:59
hilorrk:如果a和b相等時...XD 12/06 19:22
snaketsai:@殺手貓大:可是這樣可以省變數捏XD 12/07 15:01
EdisonX:@snaketsai: 可是這樣速度比較慢捏 XD 12/07 15:04
diabloevagto:這就是炫技啊! 12/07 17:21
jimmy88224:要不就直接把a代入b,b代入a 12/08 20:21
ericlee1027:請問James大,函數可傳雙重指標嗎?印象中好像不可 07/08 19:19