WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

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

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

В слабо типизированных языках, таких как 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;

См. также

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

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




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии