Re: [問題] 關於指標的問題

看板C_and_CPP作者 (藍影)時間14年前 (2011/07/15 20:38), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《hsm926 (韓森慢)》之銘言: : a=28 位址= 0022FF44 : b=16 位址= 0022FF40 : ptr1 = &b : ptr2 = &a #line 1: ptr1 = &b, ptr2=&a ┌───────────────────┐ 記憶體位址 │ 22FF40 │22FF44│ ???? │ ???? │ │ │ │ │ │ ├────┼───┼────┼─────┼ 內 含 值 │ b(16) │a(28) │ptr1(&b)│ ptr2(&a) │ │ │ │22FF40 │ 22FF44 │ ├────┼───┼────┼─────┼ : a = 28, b = 16, ptr1 = 0022FF40, 這裡合理沒問題 : *ptr1 = 16, ptr2 = 0022FF44, *ptr2 = 28 ptr1 存 22FF40, *ptr1 去看 22FF40 此位址之值,即為 b 之值,就是16 ptr2 存 22FF44, *ptr2 去看 22FF44 此位址之值,即為 a 之值,就是28 ------------------------- #line 2 : ptr2 = ptr1 ┌───────────────────┐ 記憶體位址 │ 22FF40 │22FF44│ ???? │ ???? │ │ │ │ │ │ ├────┼───┼────┼─────┼ 內 含 值 │ b(16) │a(28) │ptr1(&b)│ ptr2 │ │ │ │22FF40 │ 22FF40 │ ├────┼───┼────┼─────┼ ptr1 存的是 22FF40,assign to ptr2,故 ptr2 現在存的也是 22FF40, 這個位址實際上就是變數 b 的位址 a=28, b=16, ptr1=22FF40, ptr2=22FF40, 都沒問題 ptr1 存 22FF40 此位址, *ptr1 去 22FF40 將值取出,得到 16 (也就是 b) ptr2 現也存 22FF40 ,*ptr2 此動作便和 ptr1 一模一樣,取出得到 16 ------------------- #line 3 : *ptr1 = 19 將 19 此數值,丟到 「ptr1 所指的位址」。現 ptr1 存 22FF40, 於是去改 22FF40 的值 (也就是 b),改成 19 ┌───────────────────┐ 記憶體位址 │ 22FF40 │22FF44│ ???? │ ???? │ │ │ │ │ │ ├────┼───┼────┼─────┼ 內 含 值 │ b(19) │a(28) │ptr1(&b)│ ptr2 │ │ │ │22FF40 │ 22FF40 │ ├────┼───┼────┼─────┼ 依上述分析,一樣, *ptr1 輸出為 19、*ptr2 輸出也為 19 ----------------- : ptr1 = &a : a = 28, b = 19, ptr1 = 0022FF44, *ptr1 = 28, ptr2 = 0022FF40, *ptr2 = 19 : 請問經過ptr2 = ptr1後,為何ptr1再指向a時(ptr1=&a),ptr2沒有跟著改變? : 想很久想不出來,麻煩幫忙解答 感謝!! 前三步都看懂後,最後一步應也沒問題了,有問題請補問。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.78.41 ※ 編輯: tropical72 來自: 180.177.78.41 (07/15 20:40)

07/15 21:41, , 1F
推~~~
07/15 21:41, 1F

07/15 22:21, , 2F
07/15 22:21, 2F
文章代碼(AID): #1E83JXfA (C_and_CPP)
文章代碼(AID): #1E83JXfA (C_and_CPP)