====== объединения ====== Объединения (union) позволяют определить свой тип данных и хранят набор элементов, но в отличие от структуры все элементы объединения имеют нулевое смещение. Это значит, что разные элементы занимают в памяти один и тот же участок, то есть в памяти они накладываются друг на друга. определение union ascii { int digit; char letter; }; {{:c:c_ultimate_guide:union.png}} Длина элементов может быть разной, в этом случае размер объединения вычисляется по __наибольшему__ элементу. При определении переменной объединения мы ее можем сразу инициализировать, но стоит учитывать, что инициализировать мы можем только первый элемент объединения. В данном случае это элемент digit типа int, поэтому мы можем передать ему только целое число: union ascii code = {120}; Стоит отметить, что, так как оба элемента - letter и digit занимают одну и ту же память, то данные фактически одни и те же, только при обращении к code.digit данные интерпретируются как объект int, а при обращении к code.letter - как объект char. Объединения синтаксически сохожи с struct и enum и могут быть анонимными или иметь псевдонимы. // псевдоним объединения typedef union ascii { int digit; char letter; } ascii_code; // псевдоним анонимного объединения typedef union{ int digit; char letter; } ascii_code;