编程时我们经常会遇到处理边界问题的情况,这时数组的下标可能是从负数开始的。通常的方法是将边界分离出来单独处理,但这样比较麻烦,程序读起来也比较费力。那么能不能直观的用负数作为下标呢?
C语言中数组下标必须是从0开始的,但C语言中的指针操作给我们提供了解决负数下标问题的方法。看下面一个示例:
#include "stdafx.h"
#include
int main(int argc, char *argv[]) {
int a[10];
int i, *p;
for (i=0; i<10; i++) {
a[i] = i + 10;
}
printf("Using a...\n");
for (i=0; i<10; i++) {
printf("%d ", a[i]);
}
printf("\n");
printf("Using p...\n");
p= a + 1;
for (i=-1; i<9; i++) {
printf("%d ", p[i]);
}
printf("\n");
return 0;
}
上例中把a+1的值(地址)赋给p后,p[-1]=*(p+(-1))=*(a+1-1)=*(a+0)=a[0]。