C: Объединения

Объединение (union) является хранилищем для различных типов данных в одной области памяти. Благодаря использованию объединений вместо структур можно немного сэкономить память в том случае, если доподлинно известно, что в каждый момент времени будет использоваться лишь одно из полей объединения. В объединениях могут храниться даже структуры, не говоря о переменных базовых типов. На этапе компиляции программы компилятор вычисляет объем памяти, занимаемый наибольшим элементом объединения, а не всеми элементами, как это происходит в случае структуры.

Для того, чтобы помнить, какое из полей объединения используется в тот или иной момент времени, объединение обычно помещается в структуру вместе с целочисленной переменной, хранящей идентификатор его используемого поля.

Объединение объявляется почти так же, как и структура:

union software
{
    char *name;
    float version;
};

Для работы с объединением для начала следует объявить соответствующую переменную:

union software firefox;

Значения полей устанавливаются таким же образом, как и в случае структур:

software.name = "Firefox";
software.version = 39.0.1;

Пример

Работа с данными из объединения.

  1. #include <stdio.h>
  2.  
  3. union WhichType
  4. {
  5.     int a;
  6.     float b;
  7.     char *c;
  8. };
  9.  
  10. int main()
  11. {
  12.     union WhichType t;
  13.  
  14.     t.a = 5;
  15.     printf("%i\n", t.a);
  16.     t.b = 8.5;
  17.     printf("%4.2f\n", t.b);
  18.     t.c = "b";
  19.     printf("%c\n", t.c);
  20.  
  21.     return 0;
  22. }