Лекція 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.


Доступність

Шрифти Шрифти

Розмір шрифта Розмір шрифта

1

Колір тексту Колір тексту

Колір тла Колір тла

Кернінг шрифтів Кернінг шрифтів

Видимість картинок Видимість картинок

Інтервал між літерами Інтервал між літерами

0

Висота рядка Висота рядка

1.2

Виділити посилання Виділити посилання

Вирівнювання тексту Вирівнювання тексту

Ширина абзацу Ширина абзацу

0