Что происходит, когда вы пишете в массив [5], вы пишете в i. Они находятся рядом в стеке, в памяти, поэтому вы можете ожидать такого поведения.
Думайте об этом так,
вы создали массив с 5 элементами в
int array[5];
на самом деле массив - это просто адрес. число в [] указывает, как далеко зашел этот адрес для доступа. Итак:
- array [0] 0 ints в памяти после адреса "array"
- массив [1] равен 1 дюйму в памяти после адреса "массив"
...
- array [4] - это 4 дюйма в памяти после адреса «массив» (последний int, который вы зарезервировали для массива)
так что если вы доберетесь до
- Массив [5] - это 5 дюймов в памяти после адреса "массив"
В C нет автоматической проверки границ, поэтому он рад перезаписать вашу собственную память. Вы поместили «i» после массива [5] в стеке, наиболее вероятно, что массив [5] - это i.
Вы просто устанавливаете массив [5], или i, равным 22, следовательно, я равен 22. Теперь, когда мне 22, ваш следующий поиск в массиве [i] действительно массив [22]. Это захватывает любой мусор, оказавшийся в этом месте в памяти; или, если вам повезет, вылетает.