Шаг 85.
Объединения (union)

    На этом шаге мы введем понятие объединения.

    Структура данных объединение подобна структуре, однако в каждый момент времени может использоваться (является активным) только один из его компонентов. Шаблон объединения может задаваться записью вида:

  union
  {
   <имя типа1> <компонента1>;
   <имя типа2> <компонента2>;
        .     .      .
   <имя типаN> <компонентаN>;
  };

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

    Доступ к компонентам объединения осуществляется тем же способом, что и к компонентам структур.


    Пример.
#include <iostream.h>
void main ()
{
  union Nata
  {
   int a;
   char b;
  } kkk;
  kkk.a = 123;
  cout << kkk.a;
}
Текст этой программы можно взять здесь.

    В качестве примера объекта типа union рассмотрим объединение geom_fig[1]:

  union
  {
   int radius; // Окружность. 
   int a[2]; // Прямоугольник. 
   int b[3]; // Треугольник.
  } geom_fig;

    В этом примере обрабатывается только активный компонент, то есть компонент, который последним получает свое значение. Например, после присваивания значения компоненту radius не имеет смысла обращение к массиву b.

    Обратите внимание на то, что на одних компьютерах поля битов размещаются слева направо, на других - справа налево. Это значит, что при всей полезности работы с ними, если формат данных, с которыми мы имеем дело, дан нам свыше, то необходимо самым тщательным образом исследовать порядок расположения полей; программы, зависящие от такого рода вещей, не переносимы.

    Объединения применяются для:

    Таким образом, после задания рассмотренной структуры данных в программе будет находиться переменная, которая на законных основаниях может хранить "в себе" значения нескольких типов.

    На следующем шаге мы поговорим о переменных структурах, хранящих характеристики различных объектов.



(1)Джехани Н. Программирование на языке Си. - М.: Радио и связь, 1988. - 272с.


Предыдущий шаг Содержание Следующий шаг