C数组中p [-2]的输出

时间:2014-12-05 12:58:38

标签: c arrays pointers

我正在尝试下面的代码段。请帮助我理解o / p如何成为2? p[-2]在这里意味着什么?

int main(void){
    int ary[4] = {1, 2, 3, 6};

    int *p = ary + 3; 

    printf("%d\n", p[-2]); 
}

2 个答案:

答案 0 :(得分:5)

ary是一个包含四个int的数组。这将被放入内存中:

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

通过说p = ary + 3,您将p设置为数组中第四个元素的地址。因此,p指向6p[-2]等于*(p - 2)。这意味着您将p指向数组中的第二个元素,并访问其值:2

答案 1 :(得分:0)

int *p = ary + 3指向ary [3]所以如果你将指针向后移动两步,你就会得到ary [1]