我理解*(p + i)的工作,但是,当通过printf()函数检索带*(p-i)或p [-i]的值时,在内存级别实际发生了什么?
#include <stdio.h>
int main() {
int i, arr[5] = {1, 2, 3, 4, 5}, *p;
p = &arr[4];
for (i = 0; i < 5; i++)
printf("%d\t%d\t", *(p - i), p[-i]);
// why does this prints in reverse order?
return 0;
}
答案 0 :(得分:1)
很简单,*(p - i)
和p[-i]
使用不同的语法完全相同。有趣的是,你也可以用-i[p]
完全相同的含义来写*(p - i)
。
它以相反的顺序打印,因为您从arr[4]
开始,然后从指针中减去i
,这会减去0
,1
,2
一个一直到4
,所以它打印p[4]
,p[3]
,p[2]
,p[1]
,p[0]
这是数组{{1从最后一个元素到第一个元素。
答案 1 :(得分:0)
您已在指针中指定了最后一个元素地址并逐个减去地址,因此它以相反的顺序打印