使用负数作为数组索引

Jis*_*han 24 c arrays pointers

我遇到了一个有竞争力的问题,询问以下内容的输出:

#include <stdio.h>
int main()
{
    int a[] = {0,1,2,3,4};
    int i, *ptr;
    for(ptr = a+4, i=0; i <=4; i++)
    printf("%d", ptr[-i]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我确实读过这个话题:C中是否允许使用负数组索引?然而,我不清楚-ve符号如何以相反的顺序生成数组,即.4, 3, 2, 1, 0.

das*_*ght 25

首先,回想一下,在C中,表达式ptr[index]意味着与之相同*(ptr+index).

现在让我们再看一下你的表达式:ptr设置为a+4循环之前; 然后你应用-i索引.因此,等效指针算术表达式如下:

printf("%d", *(a+4-i));
Run Code Online (Sandbox Code Playgroud)

此表达式向后迭代数组,生成您看到的结果.

  • 简单而优雅的解释! (4认同)