Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tema_1._Strukturi_ta_ob_jednannja.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
202.15 Кб
Скачать

Структури та об'єднання

 

Структура - це іменована сукупність змінних можливо різних типів, розташована в пам'яті послідовно один за одним. Структури називаються користувача типами даних і допомагають в організації складних даних, оскільки дозволяють групу пов'язаних між собою змінних трактувати не як безліч окремих елементів, а як єдине ціле. Традиційний приклад структури - рядок платіжної відомості. Вона містить такі відомості про службовця, як його повне ім'я, адресу, номер картки соціального страхування, зарплата і т.д. Деякі з цих характеристик самі можуть бути структурами: наприклад, повне ім'я складається з декількох компонент (прізвища, імені та по батькові); аналогічно адресу, і навіть зарплата. Інший приклад (більш типовий для Сі) - з області графіки: точка є пара координат, прямокутник є пара крапок і т. д.

Головні зміни, внесені стандартом ANSI щодо структур, - це введення для них операції привласнення. Структури можуть копіюватися, над ними можуть виконуватися операції привласнення, їх можна передавати функцій як аргументи, а функції можуть повертати їх в якості результату. У більшості компіляторів вже давно реалізовані ці можливості, але тепер вони точно обумовлені стандартом. Для допускається ініціалізація.

Основні відомості про структури

Оголошення структури починається з ключового слова struct і містить список оголошень, укладений у фігурні дужки:

struct імя_структури { список оголошень; }; імя_структури іноді називають тегом структури.

Перераховані в структурі змінні називаються елементами. Елементами структур можуть бути: - Змінні та масиви базових типів, - Змінні та масиви для користувача типів, крім типу самої структури імя_структури, - Покажчики на будь-які типи, включаючи і тип самої структури імя_структури, - Функції.

Включення до структури елементів-функцій не є загальноприйнятим. Як правило, в цьому випадку переходять до поняття класу.

Елементи структур є публічними, тобто до елементів структурних змінних можна звертатися в будь-якому місці області видимості цих змінних.

Наведемо приклад структури time:

struct time { int hour; int minutes; };

У нашому прикладі елементами структури будуть hour і minutes.

Оголошення структури не резервує пам'яті. Воно є інформацією компілятору про введення користувальницького типу даних. Пам'ять виділиться при визначенні структурних змінних. Якщо структурний тип в програмі більше не буде використовуватися, оголошують безіменну структуру одночасно з визначенням змінної.

Наприклад,

struct { int x, y; } Q;

Однак якщо структура має тег, то цим тегом далі можна користуватися при визначенні структурних об'єктів. Наприклад, за допомогою заданого вище опису структури time рядок struct time t; визначає структурну змінну t типу struct time. Прийнято використовувати один і той же термін структура стосовно до призначеного для користувача типу даних і до структурної змінної. Однак, по фразах «оголошення структури» і «визначення структури» ситуація стає однозначною. Для структурної змінної, як і для масиву при оголошенні відразу виділяється пам'ять. Тому структурна змінна визначається, а тип оголошується.

Структурну змінну при її визначенні можна ініціалізувати, формуючи список ініціалізаторов її елементів у вигляді константних виразів. При цьому кожен елемент, що сам є структурою або масивом, ініціалізується окремою парою фігурних дужок. Доступ до окремого елементу структури здійснюється за допомогою бінарної операції «крапка». Офіційна назва цієї операції: звернення до елемента структури на ім'я структури.

Синтаксис операції

Имя_структуры.элемент_структуры

Операція доступу до елементу структури '.' з'єднує ім'я структури і ім'я елемента. Наприклад,

struct time t = {21, 30}; printf ("% d:% d", t.hour, t.minutes);

Структури можуть бути вкладені одна в одну. Наприклад, структура chronos містить дві структури time begin і end:

struct chronos { struct time begin, end; }; struct chronos timer = {{2,4}, {10, 10}};

Вираз timer.begin.minutes звертається до хвилин minutes часу begin з timer. У стандарті ANSI C ключове слово struct при оголошенні структурних змінних можна опускати, тобто допустима і загальноприйнята запис.

chronos timer;

Розмір структури в байтах складається з розміру її елементів. Наприклад, sizeof (timer) = 8 байт. Однак, якщо включена опція компілятора Options-Compiler-Code generation-Word allgnment, то всі елементи будуть розташовуватися по парних адресами. Тому в разі struct FIO {char F [25], I [15], Otch [20]};  будемо мати sizeof (FIO) = 26 + 16 + 20 = 62.

 

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