#include <stdio.h>
main()
{int i,a[5];
for(i=-2;i<=2;i++)
a[i]=i;
for(i=-2;i<=2;i++)
printf("%d\t",a[i]);
}
此程序能正确运行。但是很多书上说数组下标不能为负。这是为什么呢?
1 C语言数组下标可以为负,但是十分不建议这样写。
2 分析
给出的示例中定义了一维数组a
int a[5];对于数组a来说,a[-1]的写法编译器是通过的,其代表a[0]的前一个元素。但是像a[-1]这样的写法是十分危险的,因为a[-1]的地址是不确定的,万一它指向了操作系统的某块内存,则可能影响到操作系统的运行。所以不建议数组下标为负的写法。
3 扩展C语言在代码运行前不会对数组是否下标越界、溢出等异常进行警告或处理。
C#,Java等语言会将下标为负等当做是异常来看待。
在Python中,数组的下标为-1代表数组的最后一个元素,下标为-2代表数组的倒数第二个元素,其余依次类推。