Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
672 Кб
Скачать
☆

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.Ініціалізація структур.

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