在C语言中一般是不会检查数组的下标范围的,例如:
#include <stdio.h>
int main() {
int i;
int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
for (i = 0; i <= 3; i++)
{
printf("%d\n", a[i]);
}
return 1;
}
上面的代码实际上对a[3]赋值时超出了定义时数组的长度3的范围,但是编译运行并没有报错,结果也很正确。
但是,如果我们稍作修改如下:
#include <stdio.h>
int main() {
int i;
int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
for (i = 0; i <= 3; i++)
{
a[i] = 0;
printf("%d\n", a[i]);
}
return 1;
}
运行后可以发现,仅仅在循环里增加了一句
a[i] = 0;
整个程序进入了死循环。
具体原因参见:http://eagletff.blog.163.com/blog/static/116350928201077113024458/
看来在编写c程序时要格外注意手动判断数组边界的问题了。