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)
此表达式向后迭代数组,生成您看到的结果.