Этот код небезопасен и непереносим.
Он (очевидно) хранит значения 0, 0, 0 и 22 в первых 4 элементах myArray
, каждый из которых представляет собой unsigned char
(один байт).
Выражение myArray
- это имя массива, которое в большинстве случаев (включая этот) «распадается» на указатель на первый элемент массива типа unsigned char*
.Приведение преобразует unsigned char*
в int*
, и оператор *
распознает этот указатель, получая результат int
.
Так что *((int *) (myArray))
занимает первые 4 байта myArray
и интерпретирует их как объект int
.
С этим связано как минимум 3 проблемы.
- Нет гарантии, что
myArray
правильно выровнен дляint
объект. вероятно есть, но если это не так, поведение не определено;Вы могли получить ошибку шины, или неправильный результат, или что-то еще вообще.(Процессоры x86 не очень разборчивы в выравнивании, но в других системах это так.) - Нет гарантии, что
sizeof (int) == 4
.Если int
равен 8 байтам, он будет интерпретировать первые 8 байтов myArray
как int
- и 4 из этих байтов являются мусором. - Представление
int
может варьироваться.Основная проблема - порядок байтов.Если предположить, что ничего не идет не так, результат может быть либо 256 3 * 22, либо 22 - или даже что-то еще.