16. Об’єднання
Об’єднання – це вид структури, що в різні моменту часу може містити об’єкти різних типів та розмірів. Вони дають змогу зберігати неоднорідні дані в одній області пам’яті без включення у програму машинно-залежної інформації. Об’єднання використовують з метою мати змінну, що може зберігати в собі значення декількох типів. Синтаксис об’єднань аналогічний до синтаксису структур:
union [<ім’я_типу>] {
<тип> <ім’я_поля_1>;
...
<тип > <ім’я_поля_N>;
} [<список_змінних>];
де <ім’я_типу> – необов’язкове ім’я об’єднуваного типу;
<тип> <ім’я_поля_1> – оголошення поля;
<список_змінних> – необов’язкове оголошення змінних-структур; змінні-об’єднання краще оголошувати окремо від визначення об’єднання.
Розглянемо приклад:
// оголошення об’єднання
union address {
char *street;
int house;
double square;
};
// оголошення змінної-об’єднання
union address u;
Змінна-об’єднання буде достатньо великою, щоб у ній вмістилась будь-яка змінна із вказаних чотирьох типів. Точний розмір змінної залежить від реалізації. Значення одного з цих чотирьох типів може бути присвоєне змінній і в подальшому використано у виразах, тобто якщо тип отриманого нею значення співпадає з типом останнього присвоєного їй значення.
Отримати доступ до поля об’єднання можна двома способами:
- 1) за допомогою імені об’єднання через операцію “.” (крапка):
<об’єднання>.<ім’я_поля>
- 2) за допомогою вказівника на об’єднання за допомогою операції “.” (крапка):
(*<вказівник>).<ім’я_поля>
або за допомогою вказівника на об’єднання за допомогою операції “->” (стрілка):
<вказівник> -> <ім’я_поля>
Об’єднання можуть бути частиною структур і масивів, а також навпаки:
// оголошення об’єднання
union price {
int suma;
double tax;
};
// оголошення змінної-об’єднання
union price bill;
// оголошення переліку
enum Body {Sedan = 1, Hatchback, Combi, Minivan, Cargo, SUV};
// оголошення структури
struct Car {
char vendor[15];
char model[15];
unsigned year;
enum Body typeCar;
union price count;
};
// оголошення змінної-структури
struct Car c[10];
Доступ до поля вкладеної структури виконується згідно такої схеми:
<ім’я_струтури>.<ім’я_об’єднання>.<ім’я_поля>
Наприклад, доступ до поля i-го елемента об’єднання, що входить у структуру, такий самий, як і для вкладених структур:
c[i].count.tax = 25000;
(Для ознайомлення з повним текстом статті необхідно залогінитись)