Откуда появляется 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 шт):

Автор решения: Harry

Разберем построчно...

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, и значение из памяти за пределами массива, что опять же некорректно.

Что же вас удивляет? Программа пытается сделать именно то, что вы написали, ну, а что при этом она не завершается аварийно, например — так веди и не всякий перебегающий дорогу на красный свет оказывается под колесами...

→ Ссылка