Что вы делаете здесь, называется типа каламбурная и нахмурился-на. [Редактировать:, добавив комментарий Олафа здесь: Это потому, что литье в вашем коде происходит на указателе, а не на данных, на которые оно указывает.] Из того, что вы описываете, вы находитесь на малоэтажной архитектуре - при условии, что это 32-битный, int
из 1 будет принимать 4 байта (32 бита) и представлены следующим образом:
{ 1, 0, 0, 0 }
так весь ваш массив, интерпретируется как последовательность байтов, выглядит как
{ 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, ... }
Обратите внимание, что это действительно зависит от вашей реализации и архитектуры. o как раз не делаем type punning. Вот почему стандарт объявляет доступ к сохраненному значению с помощью указателя другого типа, кроме объявленного неопределенного поведения. (Или, в данном случае, как тип-каламбуры к char *
является исключением для предоставления некоторых необходимых случаев использования, от реализации поведения - вы все равно получите разные результаты на разных средах)
Вы не бросаете массив, а указатель на массив. – Olaf