Это противоречит правилам C. Внешние глобалы должны иметь согласованные декларации. (Вот почему мы используем заголовки для обеспечения согласованности.) Вы дали разрешение своему набору инструментов на создание беспорядка.
Как говорится, в вашем случае происходит просто наложение объектов (возможно, выделено достаточно памяти для int
и char[10]
, как если бы там было * 1005. * Если выделено только 4 байта (только для int
, а не для массива), то i[4]
access перезапишет что-то или, что менее вероятно, вызовет ошибку.).
25185
равно 0x6261
, что в предположении, что архитектура с прямым порядком байтов соответствует {0x61, 0x62, 0x00, 0x00}
, т.е. ;, {'a', 'b', 0, 0 }
. 'e'
не входит в это число, потому что int
вашей архитектуры имеют размер 4 байта, а 'e'
был помещен в 5-й байт.
Опять вы находитесь в сфере UB , поэтому ничего из этого не гарантировано.