Союзы - это то, что происходит с того времени, когда память была дорогой.Они используются для экономии памяти.
Когда вы объявляете объединение, оно будет достаточно большим, чтобы вместить самого большого члена.Таким образом, в этом случае размер vx
будет max(sizeof(f), sizeof(i))
.
. Поэтому при использовании vx = {x}
значение x
будет занесено в память, зарезервированную для vx
.Когда вы используете vx.f
, то все, что находится в этой памяти, будет интерпретироваться как float
, но когда вы используете vx.i
, оно будет интерпретироваться как unsigned integer
, но необработанные двоичные данные одинаковы.