精華區beta Programming 關於我們 聯絡資訊
※ 引述《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   ╔═════════╗╔═════════╗   ╔═╗╔═╗╔═╗║║╔═╗╔═╗╔═╗   ║1║║2║║║║4║║5║   ╚═╝╚═╝╚═╝║║╚═╝╚═╝╚═╝   ╚═════════╝╚═════════╝ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.113.99.242 ※ 編輯: jtmh 來自: 59.113.99.242 (08/09 16:15)
Che1983:感謝回答~~! 59.104.108.100 08/09 22:31