Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпори частина 2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
656.84 Кб
Скачать
  1. Об’єднання. Розміщення у пам’яті. Ініціалізація. Обробка.

Об'єднання - це змінна, яка може містити (у різні моменти часу) об'єкти різних типів і розмірів. Всі вимоги щодо розмірів і вирівнювання виконує компілятор. Об'єднання дозволяють зберігати різнорідні дані в одній і тій же області пам'яті без включення в програму машинно-залежної інформації.

Об'єднання схожі на структури, але виконують дещо інші функції. В об'єднанні всі змінні починаються з однієї адреси, вони поєднані в пам'яті, що дозволяє інтерпретувати одну і ту ж область пам'яті, як дані різного типу. Розмір об'єднання визначається максимальним розміром змінної.  Формат об'єднання відрізняється від структури тільки службовим словом 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;. 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]