
Об'єднання
Об'єднання - це змінна, яка може містити (у різні моменти часу) об'єкти різних типів і розмірів. Всі вимоги щодо розмірів і вирівнювання виконує компілятор. Об'єднання дозволяють зберігати різнорідні дані в одній і тій же області пам'яті без включення в програму машинно-залежної інформації. Ці кошти аналогічні варіантним записам у Паскалі. Об'єднання схожі на структури, але виконують дещо інші функції. В об'єднанні всі змінні починаються з однієї адреси, вони поєднані в пам'яті, що дозволяє інтерпретувати одну і ту ж область пам'яті, як дані різного типу. Розмір об'єднання визначається максимальним розміром змінної. Формат об'єднання відрізняється від структури тільки службовим словом union:
union ім'я { тип1 ім'я змінної 1; тип2 ім'я змінної 2; ... };
Об'єднання, як і структура, визначає новий тип даних і описується, як правило, поза опису функції, а змінні описуються, використовуючи його ім'я як ім'я нового типу. Крапка з комою в кінці опису об'єднання повинна обов'язково бути присутнім. Доступ до елементів об'єднання здійснюється так само, як до елементів структури - через точку для імені об'єднання, або по стрілці для звернення через покажчик. Приклад 1. Наприклад, є 4 прапори, і ми хотіли б скоротити час для операцій з кількома прапорами відразу. Для простоти розглянемо, як можна обнулити всі прапори однією операцією:
union Flag { long g; char ch [4]; }; void main () { Flag fl; fl.ch [0] = 1; fl.ch [1] = 2; fl.ch [2] = 4; fl.ch [3] = 8; printf ("Flag =% x \ n", fl.g); fl.g = 0; / / Всі прапори рівні 0 printf ("Flag = NULL \ n"); for (int i = 0; i <4; i + +) printf ("% d \ n", (int) fl.ch [i]); }
Ми описали об'єднання, як змінну типу long і, одночасно, у вигляді масиву типу char. Тепер, для змінної типу Flag, ми можемо працювати з кожним прапором незалежно, чи, використовуючи операцію зі змінною типу long, обнулити всі прапори простий операцією привласнення fl.g = 0;.
У наступному операторі висновку ми хотіли вивести кожен символ у вигляді цілого числа, тому ми поставили оператор явного перетворення типу: (int) fl.ch [i].