РЕДАКТИРОВАТЬ: Как указано другими, это не является законным, так как это приводит к неопределенному поведению. Я удалил это предложение из своего ответа.
Это может привести к неопределенному поведению. Вы выделили кусок памяти длиной 10 дюймов в struct abc, поэтому индексирование по 5-му (6-му) элементу приведет вас к y [0], как вы отметили в ЭТОМ конкретном случае.
Где вы можете столкнуться с проблемами, это когда компилятор C упаковывает структуру так, как вы этого не ожидаете. Это называется упаковкой данных или выравниванием битов. Когда компьютер хочет получить доступ к памяти из вашей структуры данных, он попытается сделать это единообразными частями для всей структуры. Давайте использовать пример:
struct abc {
int a;
char b;
int c;
};
Какой размер этой структуры вы ожидаете? Int - это 32 бита, а char - 8 бит, поэтому общий размер должен быть 32 + 8 + 32 = 72 бита. Однако вы обнаружите, что во многих системах эта структура на самом деле имеет размер 96 бит. Причина в том, что в конце char b упаковывается бит с дополнительными 24 битами для поддержания стандартного смещения между переменными.
Это может быть очень запутанным, когда вы объявляете структуру в двух разных местах, и одна становится битовой, а другая нет из-за опций или конфигурации времени компиляции.
Для получения дополнительной информации посмотрите упаковку битов и выравнивание данных или выравнивание битов.