Неактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зірка
 

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;

(Для ознайомлення з повним текстом статті необхідно залогінитись)