在C语言中,以下代码片段为例:
产生以下输出:
产生以下输出:
为什么C编译器没有检测到访问超出数组边界的尝试呢?难道我漏掉了什么重要的东西吗?
int i;
double x[10];
for (i = 0; i <= 10; i++) {
x[i] = (double) i;
printf("%f\n", x[i]);
}
产生以下输出:
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000
然而,在Java中,这段代码片段(相同的代码)只是语法上有所不同:
int i;
double[] x = new double[10];
for (i = 0; i <= 10; i++) {
x[i] = (double) i;
System.out.printf("%f\n", x[i]);
}
产生以下输出:
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Array.main(Array.java:14)
为什么C编译器没有检测到访问超出数组边界的尝试呢?难道我漏掉了什么重要的东西吗?