C语言 使用指针以相反的顺序检索值



我理解 *(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("%dt%dt", *(p - i), p[-i]);    
// why does this prints in reverse order?
return 0; 
}

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

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

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

最新更新