Откуда появляется 0 в массиве?
#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... И почему именно в начале ?
Ответы (1 шт):
Разберем построчно...
int A[10] = {0};
Объявлен массив с 10 элементами, т.е. с индексами элементов от 0 до 9. Все элементы нулевые.
for (int i = 1; i <= 10; i++) A[i] = i;
В элементы 1 — 10 пишется значение, соответствующее номеру. Т.е. элемент 0 остается равным 0; в остальные 9 элементов записываются соответствующие значения, после чего за границей массива записывается еще одно число 10. Тем самым программа уже приводит к неопределенному поведению.
for (int i = 0; i <= 10; i++) printf ("%d ", A[i]);
Затем вы просите вывести 11 элементов, с нулевого до десятого. Что программа и выполняет. Выводя корректные значения 0 — 9, и значение из памяти за пределами массива, что опять же некорректно.
Что же вас удивляет? Программа пытается сделать именно то, что вы написали, ну, а что при этом она не завершается аварийно, например — так веди и не всякий перебегающий дорогу на красный свет оказывается под колесами...