Лекція 11. Структури або записи
| Сайт: | Навчально-інформаційний портал НУБіП України |
| Курс: | Основи програмування |
| Книга: | Лекція 11. Структури або записи |
| Надруковано: | Гість-користувач |
| Дата: | неділя, 15 лютого 2026, 19:42 |
1. Описання структур
При розв’язуванні багатьох інформаційних задач часто доводиться використовувати дані різного типу про той же самий об’єкт. Наприклад, дані про книгу: автор, назва, видавництво, рік видання, кількість сторінок. Можна було б зберігати бібліографічні дані про книги у різних масивах: автори; назви і т.п. Але це незручно. Тому виникає необхідність використання комбінованих типів, елементами яких можуть бути різні типи.
У мові С до такого типу належать структури або записи.
Описання структур має такий вигляд:
struct < ім’я>
{ описи елементів } [ім'я змінної, …];
Окремий опис елемента це фактично опис змінної – тип та ім'я.
Ім'я структури інакше називається тегом (ярлик, етикетка). Тег дає назву структурі ті є коротким позначення тої частини структури, яка міститься в дужках.
Зрозуміло, що область дії і шаблону, і змінних залежить від їх розташування в програмі. Якщо опис структури навести до початку функції main, то він діятиме на всю програму, тобто матиме зовнішній характер. Якщо ж це зробити у функції після відкриття дужки – автоматичний.
2. Двоїстий характер терміну "структура""
Зазначимо, що слово структура має двоїстий характер. З одного боку його відносять до опису шаблона, а з другого – до змінних-структур.
Опис структури аналогічний опису типу у мові Паскаль, він є лише шаблоном, і не супроводжується виділенням місця у пам'яті.
Оскільки структури належать до складних типів, то для них нема ні однієї операції. Тому у виразах повні імена структурних змінних використовувати НЕ можна.
3. Імена елементів структури
В арифметичних виразах використовуються лише імена окремих елементів структури.
Ім'я елемента складається із двох частин:
< ім'я структури>.< ім'я елемента>
Окремі елементи можуть бути різного типу як простого, так і складного. Допускається використання й елементів структур.
4. Структурні змінні та покажчики
На відміну від масиву, ім'я структурної змінної НЕ є адресою. Однак в окремих випадках використання покажчиків на структуру дозволяє реалізувати ефективну програму. Наприклад, надрукувати масив даних про студентів:
struct person
{ char name[20]; int year;
char sex; };
main ()
{ struct person stud[30], *stpr; // stpr – покажчик на структуру // присвоєння значень всім елементам
printf (“Прізвище рік стать\n”); for (stpr=stud; stpr<stud+30; ++stpr)
printf (“ %s %d %c \n“, (*stpr).name, (*stpr).year, (*stpr).sex); }
Тут для звертання до елементів структур використані імена (*stpr).name. і насправді , при модифікації покажчика на структуру в stpr буде записана адреса наступної структури й звертання до неї можна здійснити за допомогою прямої адресації: *stpr. Круглі дужки тут потрібні тому, що операція "." має більший пріоритет, ніж *. І якщо дужок не буде, то вийде нісенітниця, тому що stpr - це покажчик, а не повне ім'я структури.
У версії ANSI-C дозволено передавати структури як параметри функцій і передавати структури через ім'я функції. Крім того, для них впроваджена операція присвоєння. Інші арифметичні операції й відносини над структурами не виконуються, тому що в цьому нема сенсу.
Поля
У деяких завданнях аналізу й класифікації шифр об'єкта повинен відображати наявність або відсутність певного якості. Наприклад, при синтаксичному аналізі таблиць імен змінних прийде вирішувати, до якого класу пам'яті належить змінна: автоматичного, статичного або зовнішнього. Звичайно, можна було б використовувати структуру з такими трьома елементами, а при наявності такої властивості записувати 1, при відсутності 0.
При великій кількості змінних це приведе до нераціонального використання пам'яті. Тому краще під кожну таку ознаку можна відвести один біт і кодувати ці ознаки ступенем числа 2.


Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання
Вирівнювання тексту
Ширина абзацу