Другие упоминали различия в архитектуре (little - big endian).
Я прочитал проблему о том, что поскольку память для переменных является общей, то путем записи одной переменной другие изменяются, и, в зависимости от их типа, значение может быть бессмысленным.
например.
объединение {
плавать f;
int i;
} x;
Писать в x.i было бы бессмысленно, если бы вы потом читали из x.f - если только это не то, что вы намеревались посмотреть на компоненты знака, экспоненты или мантиссы поплавка.
Я думаю, что есть также проблема выравнивания: если некоторые переменные должны быть выровнены по словам, вы можете не получить ожидаемый результат.
например.
объединение {
символ с [4];
int i;
} x;
Если гипотетически на некоторой машине символ должен быть выровнен по слову, то c [0] и c [1] будут совместно использовать память с i, но не c [2] и c [3].