昨天一个同学和我谈起他在测试C程序时时发现使用-1为下标来访问数组,gcc并没有报错,而且能够运行成功,这个以前我还没试过,处于好奇,今天下午抽了点时间看了一下。
下面是我使用的测试代码,运行环境是DEV-C++4.9.9.2,编译器使用的是gcc。
int a[4] = {1,2,3,4};
int b[4] = {5,6,7,18};
// double c = 20.3;
printf("a[-1] is %d/n",a[-1]);
printf("a[-4] is %d/n",a[-4]);
printf("b[4] is %d/n",b[4]);
运行结果为
a[-1] is 18
a[-4] is 5
b[4] is 1
请按任意键继续. . .
现在我和室友的解释是这样,程序中a,b数组按下列方式进入运行栈:
....a[3],a[2],a[1],a[0],b[3],b[2],b[1],b[0]....
<