#include <stdio.h>
#include <stdlib.h>
int main () {
int A[10] = {0};
for (int i = 1; i <= 10; i++) {
A[i] = i;
}
for (int i = 0; i <= 10; i++) {
printf ("%d ", A[i]);
}
return 0;
}
->: 0 1 2 3 4 5 6 7 8 9 10
0从哪里来?我是从1开始填写的,而不是从0开始填写的……为什么要从一开始呢?
让我们一行一行地看...
声明了一个包含 10 个元素的数组,即 元素索引从 0 到 9。所有元素均为零。
在元素 1 - 10 中写入与数字相对应的值。那些。元素 0 保持等于 0;将相应的值写入剩余的9个元素,然后在数组边界之外写入另一个数字10。因此,程序已经导致未定义的行为。
然后你要求输出11 个元素,从零到十。这就是程序的作用。输出正确的值0 - 9,而数组外部内存中的值又是不正确的。
什么让你感到惊讶?该程序正在尝试完全按照您所写的操作,但是它不会崩溃,例如 - 像这样开车,并不是每个红灯过马路的人都会被车轮压住......