2014-12-05 51 views
0

我正在嘗試下面的代碼片段。請幫助我理解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]); 
} 
+4

數組索引相當於[指針運算](http://stackoverflow.com/a/21341838/1708801) – 2014-12-05 13:01:47

回答

5

ary是四個int秒的陣列。這將被放置在內存是這樣的:

| 1 | 2 | 3 | 6 | 
    ^ ^  ^
    |  |   | 
    ary p - 2   p 

按說p = ary + 3,你設置p到陣列中的第四個元素的地址。所以,p指向6p[-2]等於*(p - 2)。這意味着您將p指向數組中的第二個元素,並訪問其值:2

+0

你的意思是簡單的數學... p = arr + 3; p-2 => arr + 3-2 => arr + 1 => arr [1] .....糾正我如果我錯了。 – alisha 2014-12-05 13:11:51

+0

的確,你做對了!如果有幫助,請接受答案。 – bzeaman 2014-12-05 13:13:07

+0

'ary'是一個4'int'數組,而不是指向一個4'int'數組的指針。 – mch 2014-12-05 14:16:17

0

int *p = ary + 3點到ary [3]因此,如果移動指針後退兩步你將得到進制[1]

+0

數組從0開始。 – deviantfan 2014-12-05 13:04:44

+0

@deviantfan對不起,索引不正確。 – user1766169 2014-12-05 13:13:51