мета-данные страницы
объединения
Объединения (union) позволяют определить свой тип данных и хранят набор элементов, но в отличие от структуры все элементы объединения имеют нулевое смещение. Это значит, что разные элементы занимают в памяти один и тот же участок, то есть в памяти они накладываются друг на друга.
определение
union ascii { int digit; char letter; };
Длина элементов может быть разной, в этом случае размер объединения вычисляется по наибольшему элементу.
При определении переменной объединения мы ее можем сразу инициализировать, но стоит учитывать, что инициализировать мы можем только первый элемент объединения. В данном случае это элемент 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;
