我正在尝试下面的代码段。请帮助我理解o / p如何成为2? p[-2]
在这里意味着什么?
int main(void){
int ary[4] = {1, 2, 3, 6};
int *p = ary + 3;
printf("%d\n", p[-2]);
}
答案 0 :(得分:5)
ary
是一个包含四个int
的数组。这将被放入内存中:
| 1 | 2 | 3 | 6 |
^ ^ ^
| | |
ary p - 2 p
通过说p = ary + 3
,您将p
设置为数组中第四个元素的地址。因此,p
指向6
。 p[-2]
等于*(p - 2)
。这意味着您将p
指向数组中的第二个元素,并访问其值:2
。
答案 1 :(得分:0)
int *p = ary + 3
指向ary [3]所以如果你将指针向后移动两步,你就会得到ary [1]