【发布时间】:2014-08-29 18:33:46
【问题描述】:
我遇到了一个竞争性问题,询问以下输出:
#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;
}
我确实读过这个主题:Are negative array indexes allowed in C? 但是我不清楚 -ve 符号如何以相反的顺序生成数组,即。 4, 3, 2, 1, 0。
【问题讨论】:
-
根据您问题的标题,您没有使用负数作为 array 索引;您正在使用指针
ptr和索引-i来计算a[]中某个元素的指针算术。数组a[]始终以0为根,对于一些小于零的n,通过a[n]取消对it 的引用是未定义的行为。数组不是指针。下面的潮水般的答案很好地解释了指针数学概念。 -
a[b]==*(a + b)==b[a] -
从上面记住 WhozCraig 的回答。在您的职业生涯中,您可能会遇到使用此类指针在“字节”数组中“戳”和“删除”值的代码。这有时甚至用于敲入空值以终止字符串?上面的问题是“pythonesque”,因为否定可以在 Python 中使用?