精華區beta Programming 關於我們 聯絡資訊
※ 引述《che1983.bbs@bbs.wretch.cc (= =a)》之銘言: : 我跑了以下程式 : int num[2][3]={0,1,2,3,4,5}; : 得出結論如下 : 我覺得很怪 : 那就是 : *(*(num+i)+j) 等價 num[i][j] : 其中num+i等價*(num+i) : num+i 代表第i列的起始位址 Why? 為什麼不是num起始位址後第i個位置 指標加 1 並不是只有 memory address 值加一喔! eg: char A[10], *pA; double B[10], *pB; pA=A; pB=B; pA++ 和 pB++ 後, pA 指到 A[1], pB 指到 B[1], 請問 B[1] 和 B[0] 的 address 差跟 A[1] 和 A[0] 的 address 差相同嗎? 相同道理, num 本身是個 pointer to int [3], num+i 其實會指到 第 i 個 int [3]. 而不是 num 指標指到的下 i 個 byte. : num+i等價*(num+i) Why? 加一個*不是代表去那個位址取值嗎 說等價怪怪的, 你試試看以下的句子過不過得了關 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); : 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.137.7.224 ※ 編輯: march20 來自: 71.137.7.224 (08/09 06:15) ※ 編輯: march20 來自: 71.137.7.224 (08/09 06:16) ※ 編輯: march20 來自: 71.137.7.224 (08/09 06:17) ※ 編輯: march20 來自: 71.137.7.224 (08/09 06:17)
Che1983:感謝回答~~ 59.104.108.100 08/09 22:31