我正在嘗試下面的代碼片段。請幫助我理解o/p如何到達2? p[-2]
這是什麼意思?在C數組中輸出p [-2]
int main(void){
int ary[4] = {1, 2, 3, 6};
int *p = ary + 3;
printf("%d\n", p[-2]);
}
我正在嘗試下面的代碼片段。請幫助我理解o/p如何到達2? p[-2]
這是什麼意思?在C數組中輸出p [-2]
int main(void){
int ary[4] = {1, 2, 3, 6};
int *p = ary + 3;
printf("%d\n", p[-2]);
}
ary
是四個int
秒的陣列。這將被放置在內存是這樣的:
| 1 | 2 | 3 | 6 |
^ ^ ^
| | |
ary p - 2 p
按說p = ary + 3
,你設置p
到陣列中的第四個元素的地址。所以,p
指向6
。 p[-2]
等於*(p - 2)
。這意味着您將p
指向數組中的第二個元素,並訪問其值:2
。
int *p = ary + 3
點到ary [3]因此,如果移動指針後退兩步你將得到進制[1]
數組從0開始。 – deviantfan 2014-12-05 13:04:44
@deviantfan對不起,索引不正確。 – user1766169 2014-12-05 13:13:51
數組索引相當於[指針運算](http://stackoverflow.com/a/21341838/1708801) – 2014-12-05 13:01:47