Interested Article - Объединение (структура данных)

В информатике объединение ( англ. union ) представляет собой значение или структуру данных , которое может иметь несколько различных представлений .

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

В слабо типизированных языках, таких как C и C++ , тип объединение реализует каламбур типизации , то есть обеспечивает интерпретацию одного и того же значения в соответствии с разными типами .

В зависимости от конкретного языка и типа , значение объединения может использоваться в таких операциях как присваивание или сравнение в отрыве от информации о конкретном типе или с требованием её наличия.

Пример на Си

union Some {
    int i;
    double a;
};

Это объединение хранит либо целое число ( переменная i ), либо число с плавающей точкой (переменная a ). В и C++ объединение реализовано как разновидность структуры , к нему обращаются так же, как и к структуре : через символ « -> » при использовании указателя , или « . » при использовании обычной переменной .

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

struct STRX {
   int i;
   Some v, *w;
} a, *b;

Рассмотрим способы обращения к объединению, заданные через указатели , переменные и смешанным образом:

a.v.i = 123;
b->v.i = 123;
a.w->i = 123;
b->w->i = 123;

Есть возможность сделать объединение безымянным:

struct STRX {
    int j;
    union {
        int i;
        double a;
    };
} a;

При этом обращение упрощается:

a.i = 123;
a.a = 4.5;

См. также

Источник —

Same as Объединение (структура данных)