→ Che1983:感謝回答~~! 59.104.108.100 08/09 22:31
※ 引述《march20 ()》之銘言:
: ※ 引述《che1983.bbs@bbs.wretch.cc (= =a)》之銘言:
[前文恕刪]
: : num+i等價*(num+i) Why? 加一個*不是代表去那個位址取值嗎
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
是沒錯,不過這裡取到的值還是一個位址啊,
而且這個位址就跟 num + i 得到的位址相同,
理由詳述於下文。
: 說等價怪怪的, 你試試看以下的句子過不過得了關
: int *p, *q;
: p = num+1;
: q = *(num+1);
: 第一個不行, 第二個可以. num+i 和 *(num+i) 並不等價!
: 那為什麼 int num[2][3]={0,1,2,3,4,5}; 可以對?
: 呃, 這是 compiler magic (該怎麼說才好 ^^;)
: 目的只是為了讓 programmer 容易設定初值, 不代表 num+i = *(num+i);
num + i 與 *(num + i) 的確不「等價」,
前者的型別是 int *[3], 指到的是下圖中黃框的部分,
後者的型別則是 int *, 指到的會是下圖中綠框的部分,
但它們的起始位置相同 (同一 i 時),所以會得到相同的位址,
不知道這樣的解釋是讓原 po 更清楚,還是更模糊了 ^^"
i = 0 i = 1
╔═════════╗╔═════════╗
║╔═╗╔═╗╔═╗║║╔═╗╔═╗╔═╗║
║║0║║1║║2║║║║3║║4║║5║║
║╚═╝╚═╝╚═╝║║╚═╝╚═╝╚═╝║
╚═════════╝╚═════════╝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.99.242
※ 編輯: jtmh 來自: 59.113.99.242 (08/09 16:15)