Re: [問題] 關於指標的問題
※ 引述《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
討論串 (同標題文章)