Об'єднання (структура даних) — Вікіпедія
Матеріал з Вікіпедії — вільної енциклопедії.
В інформатиці об'єднання (англ. union) є значенням або структурою даних, яке може мати кілька різних подань.
У сильно типізованих мовах тип об'єднання відповідає поняттю з теорії типів тип-сума, тобто вимагає використовувати різні конструктори для значень різних типів.
У слабко типізованих мовах, як-от C і C++, тип об'єднання реалізує каламбур типізації, тобто забезпечує інтерпретування одного й того ж значення відповідно до різних типів.
Залежно від конкретної мови та типу, значення об'єднання може використовуватися в таких операціях як присвоєння чи порівняння у відриві від інформації про конкретний тип або з вимогою її наявності.
union Some { int i; double a; };
Це об'єднання зберігає або ціле число (змінна i
), або число з рухомою комою (змінна a
). У C та 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;
При цьому звернення спрощується: