使用指针

时间:2017-07-31 11:24:44

标签: c arrays pointers

我理解*(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; 
}

2 个答案:

答案 0 :(得分:1)

很简单,*(p - i)p[-i]使用不同的语法完全相同。有趣的是,你也可以用-i[p]完全相同的含义来写*(p - i)

它以相反的顺序打印,因为您从arr[4]开始,然后从指针中减去i,这会减去012一个一直到4,所以它打印p[4]p[3]p[2]p[1]p[0]这是数组{{1从最后一个元素到第一个元素。

答案 1 :(得分:0)

您已在指针中指定了最后一个元素地址并逐个减去地址,因此它以相反的顺序打印