В C нет проверки длины массива во время выполнения, как в таких языках, как Java. В этом коде пустой массив создается в некотором месте в памяти. При обращении к массиву с помощью a[i]
местоположение в памяти рассчитывается на основе размера элементов (в данном случае размер int
) и доступа к этому месту в памяти, независимо от того, действительно ли вы хотите, чтобы к нему обращались или нет , C дает вам право свободно делать все, что не позволяют современные языки.
С одной стороны, это позволяет вам писать очень эффективный код, потому что нет никаких дополнительных затрат на все проверки, кроме с другой стороны, очень легко написать код, который выдает странные ошибки, если вы не полностью осознаёте и не помните, как работает распределение памяти.
Одна из основных причин, по которым были созданы такие языки, как Java, была избавить разработчика от необходимости беспокоиться об этих проблемах. С одной стороны, Java "безопаснее", но с другой стороны наблюдается снижение производительности.