мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
c:c_ultimate_guide:union [2025/10/29 14:23] – создано radi0devc:c_ultimate_guide:union [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 3: Строка 3:
 Объединения (union) позволяют определить свой тип данных и хранят набор элементов, но в отличие от структуры все элементы объединения имеют нулевое смещение. Это значит, что разные элементы занимают в памяти один и тот же участок, то есть в памяти они накладываются друг на друга. Объединения (union) позволяют определить свой тип данных и хранят набор элементов, но в отличие от структуры все элементы объединения имеют нулевое смещение. Это значит, что разные элементы занимают в памяти один и тот же участок, то есть в памяти они накладываются друг на друга.
  
-{{fixme}}+определение 
 +<code c> 
 +union ascii { 
 +  int digit; 
 +  char letter; 
 +}; 
 +</code> 
 + 
 +{{:c:c_ultimate_guide:union.png}} 
 + 
 +Длина элементов может быть разной, в этом случае размер объединения вычисляется по __наибольшему__ элементу. 
 + 
 +При определении переменной объединения мы ее можем сразу инициализировать, но стоит учитывать, что инициализировать мы можем только первый элемент объединения. В данном случае это элемент digit типа int, поэтому мы можем передать ему только целое число: 
 +<code c> 
 +union ascii code = {120}; 
 +</code> 
 + 
 +Стоит отметить, что, так как оба элемента - letter и digit занимают одну и ту же память, то данные фактически одни и те же, только при обращении к code.digit данные интерпретируются как объект int, а при обращении к code.letter - как объект char. 
 + 
 +Объединения синтаксически сохожи с struct и enum и могут быть анонимными или иметь псевдонимы. 
 + 
 +<code c> 
 +// псевдоним объединения 
 +typedef union ascii { 
 +  int digit; 
 +  char letter; 
 +} ascii_code; 
 + 
 +// псевдоним анонимного объединения 
 +typedef union{ 
 +  int digit; 
 +  char letter; 
 +} ascii_code; 
 +</code>