[問題] 關於指標的問題

看板C_and_CPP作者 (韓森慢)時間14年前 (2011/07/15 20:10), 編輯推噓1(1012)
留言13則, 2人參與, 最新討論串1/3 (看更多)
使用dev c++ 程式碼: a=28 位址= 0022FF44 b=16 位址= 0022FF40 ptr1 = &b ptr2 = &a a = 28, b = 16, ptr1 = 0022FF40, *ptr1 = 16, ptr2 = 0022FF44, *ptr2 = 28 ptr2 = ptr1 a = 28, b = 16, ptr1 = 0022FF40, *ptr1 = 16, ptr2 = 0022FF40, *ptr2 = 16 *ptr1 = 19 a = 28, b = 19, ptr1 = 0022FF40, *ptr1 = 19, ptr2 = 0022FF40, *ptr2 = 19 ptr1 = &a a = 28, b = 19, ptr1 = 0022FF44, *ptr1 = 28, ptr2 = 0022FF40, *ptr2 = 19 請問經過ptr2 = ptr1後,為何ptr1再指向a時(ptr1=&a),ptr2沒有跟著改變? 想很久想不出來,麻煩幫忙解答 感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.209.200 ※ 編輯: hsm926 來自: 125.230.209.200 (07/15 20:11)

07/15 20:16, , 1F
ptr2 = ptr1 只是把當下的ptr1內存的記憶體位置給ptr2
07/15 20:16, 1F

07/15 20:18, , 2F
你之後雖然改變ptr1的資料 可是你沒有指令去改ptr2
07/15 20:18, 2F

07/15 20:19, , 3F
所記錄的記憶體位置 所以不會變的
07/15 20:19, 3F

07/15 20:20, , 4F
那為什麼下一行 *ptr1 = 19, *ptr2也會等於19 ??
07/15 20:20, 4F

07/15 20:22, , 5F
這就是指標的妙處了 因為你改變的是 某記憶體位址內的
07/15 20:22, 5F

07/15 20:22, , 6F
"資料" 而此時ptr1 和ptr2都指向同一位址
07/15 20:22, 6F

07/15 20:23, , 7F
所以*ptr1 =19 是把ptr1所指像的記憶體位址內的"資料"
07/15 20:23, 7F

07/15 20:24, , 8F
改成19 你要小心 記憶體位置和記憶體位置上的資料
07/15 20:24, 8F

07/15 20:24, , 9F
是不同的東西 指標則是專門儲存記憶體位置的變數型別
07/15 20:24, 9F

07/15 20:29, , 10F
所以ptr2=ptr1 表示同樣指向b, 而*ptr1=19 也就是把b=19
07/15 20:29, 10F

07/15 20:30, , 11F
最後ptr1=&a 此時ptr2還是指向b 這樣對嗎?
07/15 20:30, 11F

07/15 20:30, , 12F
就是這樣
07/15 20:30, 12F

07/15 20:32, , 13F
原來如此,一個地方想錯了 真的是非常感謝您的解答^^
07/15 20:32, 13F
文章代碼(AID): #1E82uO9Y (C_and_CPP)
文章代碼(AID): #1E82uO9Y (C_and_CPP)