- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Робота з обєднаннями
Елементом структури може бути бітове поле, що забезпечує доступ до окремих бітам пам'яті. Поза структур бітові поля оголошувати не можна. Не можна також організовувати масиви бітових полів і не можна застосовувати до полів операцію визначення адреси. У загальному випадку тип структури двійкового полем задається в наступному вигляді:
struct {unsigned ідентифікатор 1: довжина-поля 1;
unsigned ідентифікатор 2: довжина-поля 2;}
довжина - поля задається цілим виразом або константою. Ця константа визначає число бітів, відведений відповідному полю. Поле нульовий довгі позначає вирівнювання на границю наступного слова.
Приклад:
struct {unsigned a1: 1;
unsigned a2: 2;
unsigned a3: 5;
unsigned a4: 2;} prim;
Структури бітових полів можуть містити й знакові компоненти. Такі компоненти автоматично розміщуються на відповідних границях слів, при цьому деякі біти слів можуть залишатися невикористаними.
Посилання на полі бітів виконуються точно так само, як і компоненти загальних структур. Саме ж бітове поле розглядається як ціле число, максимальне значення якого визначається довжиною поля.
Дуже часто деякі об'єкти програми відносяться до одного і того ж класу, відрізняючись лише деякими деталями. Розглянемо, наприклад, уявлення геометричних фігур. Загальна інформація про фігури може включати такі елементи, як площа, периметр. Проте відповідна інформація про геометричних розмірах може виявитися різною в залежності від їх форми.
Розглянемо приклад, в якому інформація про геометричні фігури представляється на основі комбінованого використання структури та об'єднання.
struct figure {
double area, perimetr; / * загальні компоненти * /
int type; / * ознака компонента * /
union / * перерахування компонент * /
{Double radius; / * окружність * /
double a [2]; / * прямокутник * /
double b [3]; / * трикутник * /
} Geom_fig;
} Fig1, fig2;
У загальному випадку кожен об'єкт типу figure буде складатися з трьох компонентів: area, perimetr, type. Компонент type називається міткою активного компонента, так як він використовується для вказівки, який з компонентів об'єднання geom_fig є активним в даний момент. Така структура називається змінною структурою, тому що її компоненти змінюються залежно від значення мітки активного компонента (значення type). Відзначимо, що замість компоненти type типу int, доцільно було б використовувати перераховуються тип. Наприклад, такий
enum figure_chess {CIRCLE,
BOX,
TRIANGLE};
Константи CIRCLE, BOX, TRIANGLE отримають значення відповідно рівні 0, 1, 2. Змінна type може бути оголошена як має Перечіслімий тип:
enum figure_chess type;
У цьому випадку компілятор СІ попередить програміста про потенційно помилкових присвоєння, таких, наприклад, як
figure.type = 40;
У загальному випадку змінна структури буде складатися з трьох частин: набір загальних компонент, мітки активного компонента і частини з мінливими компонентами. Загальна форма змінної структури, має наступний вигляд:
struct {загальні компоненти;
мітка активного компонента;
union {опис компоненти 1;
опис компоненти 2;
:::
опис компоненти n;
} Ідентифікатор-об'єднання;
} Ідентифікатор-структури;
Приклад визначення змінної структури з ім'ям helth_record
struct {/ * загальна інформація * /
char name [25]; / * ім'я * /
int age; / * вік * /
char sex; / * підлогу * /
/ * Мітка активного компонента * /
/ * (Сімейний стан) * /
enum merital_status ins;
/ * Змінна частина * /
union {/ * неодружений * /
/ * Немає компонент * /
struct {/ * перебуває в шлюбі * /
char marripge_date [8];
char spouse_name [25];
int no_children;
} Marriage_info;
/ * Розлучений * /
char date_divorced [8];
} Marital_info;
} Health_record;
enum marital_status {SINGLE, / * неодружений * /
MARRIGO, / * одружений * /
DIVOREED / * розлучений * /
};
Звертатися до компонентів структури можна за допомогою посилань:
helth_record.neme,
helth_record.ins,
helth_record.marriage_info.marriage_date.
