- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Cтруктури
Cтруктура - це складовий об'єкт, в який входять елементи будь-яких типів, за винятком функцій. На відміну від масиву, який є однорідним об'єктом, структура може бути неоднорідною. Тип структури визначається записом виду:
struct {список визначень}
У структурі обов'язково повинен бути вказаний хоча б один компонент. Визначення структур має наступний вигляд:
тип-даних описувач;
де тип-даних вказує тип структури для об'єктів, що визначаються в описувач. У простій формі описувачі являють собою ідентифікатори або масиви.
Приклад:
struct {double x, y;} s1, s2, sm [9];
struct {int year;
char moth, day;} date1, date2;
Змінні s1, s2 визначаються як структури, кожна з яких складається з двох компонент х і у. Змінна sm визначається як масив з дев'яти структур. Кожна з двох змінних date1, date2 складається з трьох компонентів year, moth, day. > P> Існує й інший спосіб асоціювання імені з типом структури, він заснований на використанні тега структури. Тег структури аналогічний тегу перечислимого типу. Тег структури визначається наступним чином:
struct тег {список описів;};
де тег є ідентифікатором.
У наведеному нижче прикладі ідентифікатор student описується як тег структури:
struct student {char name [25];
int id, age;
char prp;};
Тег структури використовується для подальшого оголошення структур даного виду у формі:
struct тег список-ідентифікаторів;
Приклад:
struct studeut st1, st2;
Використання тегів структури необхідно для опису рекурсивних структур. Нижче розглядається використання рекурсивних тегів структури.
struct node {int data;
struct node * next;} st1_node;
Тег структури node дійсно є рекурсивним, оскільки він використовується в своєму власному описі, тобто у формалізації покажчика next. Структури не можуть бути прямо рекурсивними, тобто структура node не може містити компоненту, яка є структурою node, але будь-яка структура може мати компоненту, яка є покажчиком на свій тип, як і зроблено в наведеному прикладі.
Доступ до компонентів структури здійснюється за допомогою вказівки імені структури і наступного через точку імені виділеного компонента, наприклад:
st1.name = "Іванов";
st2.id = st1.id;
st1_node.data = st1.age;
Об'єднання (суміші)
Об'єднання подібно структурі, однак в кожний момент часу може використовуватися (або іншими словами бути відповідним) тільки один з елементів об'єднання. Тип об'єднання може задаватися в наступному вигляді:
union {опис елемента 1;
...
опис елемента n;};
Головною особливістю об'єднання є те, що для кожного з оголошених елементів виділяється одна і та ж область пам'яті, тобто вони перекриваються. Хоча доступ до цієї області пам'яті можливий з використанням будь-якого з елементів, елемент для цієї мети повинен вибиратися так, щоб отриманий результат не був безглуздим.
Доступ до елементів об'єднання здійснюється тим же способом, що і до структур. Тег об'єднання може бути формалізований точно так само, як і тег структури.
Об'єднання застосовується для наступних цілей:
- Ініціалізації використовуваного об'єкта пам'яті, якщо в кожний момент часу тільки один об'єкт із багатьох є активним;
- Інтерпретації основного уявлення об'єкта одного типу, як якщо б цьому об'єкту був присвоєний інший тип.
Пам'ять, яка відповідає змінній типу об'єднання, визначається величиною, необхідної для розміщення найбільш довгого елементу об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити невживану пам'ять. Всі елементи об'єднання зберігаються в одній і тій же області пам'яті, починаючи з однієї адреси.
Приклад:
union {char fio [30];
char adres [80];
int vozrast;
int telefon;} inform;
union {int ax;
char al [2];} ua;
При використанні об'єкта infor типу union можна обробляти тільки той елемент який отримав значення, тобто після присвоєння значення елементу inform.fio, не має сенсу звертатися до інших елементів. Об'єднання ua дозволяє отримати окремий доступ до молодшого ua.al [0] і до старшого ua.al [1] байтам двухбайтного числа ua.ax.
Питання для контролю:
1.Що таке структура?
2. Який синтаксис має структура?
3. Що таке обєднання?
Література:
1.Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. –стор 170-181
Урок №17
(згідно робочої навчальної програми)
Тема:Порівняння і привласнення структур, ініціалізація структур
Питання:
1.Робота з структурами.
2.Ініціалізація структур.
