Объединение — объект, который в каждый момент времени содержит один из нескольких элементов различных типов.
Все компоненты объявления
структур, такие как
шаблоны, имена типа, имена элементов и т.д. применимы и при объявлении объединений. Единственное отличие состоит в том, что при объявлении объединения вместо
ключевого слова struct используется
union.
Примечание 1
Объединение не может иметь битовые поля.
Пример 1
struct s_tag{
char c;
int i;
doubl d;
} s_item;
Пример 2
union u_tag{
char c;
int i;
doubl d;
} u_item;
В отличие от структуры, объединение может в любой момент времени содержать только один из своих элементов. Объединение позволяет использовать одну область памяти для хранения различных видов данных в разные моменты времени. Фактически, объединение — это структура, в которой все поля начинаются со смещением 0, таким образом, поля накладываются друг на друга.
Пример 3
printf("размер структуры = %d\n", sizeof(s_item));
printf("размер объединения = %d\n", sizeof(u_item));
Вывод:
размер структуры = 16
размер объединения = 8
Объединения часто включаются в структуры, один из элементов которых является ключом, указывающим тип хранимого в памяти элемента объединения.
Пример 4
/* содержит информацию о работающих служащих и пенсионерах */
struct mail {
char id; /* a - active (), r - retired()*/
union{
struct{char name[30];
char dept[10];
char location[3];
} active;
struct{char name[30];
char street[20];
char city_state[3];
char zip[5];
} retired;
} info;
} preson;
Структура типа struct mail используется для хранения почтового адреса работающего служащего или пенсионера. При заполнении структуры этого типа информацией в нее заносится порция данных, соответствующая элементам active или retired объединения info. Поле id устанавливается равным 'a' или 'r' для указания фактически записанного в объединении элемента. При применении объединения используется меньше памяти, чем в случае применения структуры, которая имела бы идентичные поля, но некоторые из них не использовались бы.
Рис. 3. Объединение как элемент структуры