推 Che1983:感謝回答~~ 59.104.108.100 08/09 22:31
※ 引述《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)