Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_OP / T13.doc
Скачиваний:
91
Добавлен:
17.03.2016
Размер:
364.54 Кб
Скачать

Опис комбінованих типів

У різних мовах програмування передбачені різні синтаксичні правила для задання комбінованих типів даних.

Відповідна РБНФ-нотація для мов С/С++ є наступною:

оголошення_структури = struct [тип_структури]“{“ тип список_полів {; тип список_полів“}“;

список_полів = поле{, поле}

У відповідності із цими правилами, формат оголошення структури у С/С++ має наступний вид:

struct [тип_структури]

{ тип поле_1;

...

тип поле_n; // “;” обов'язково після і перед дужкою ”}

};

При цьому порядок вказання полів не грає ролі і може бути довільним. Наприклад,

struct TStudent

{ сhаr FIO[20];

сhаr *group;

int year;

};

У випадку ієрархічної структури, коли, наприклад, однією із характеристик студента є ще й перелік зданих ним іспитів з оцінками, оголошення такої структури може мати вид:

struct TMarks

{ int KDM;

int OP;

int Physics;

};

struct TStudent

{ сhаr FIO[20];

сhаr *group;

int year;

сhаr *address;

TMarks marks;

};

Для звертання до структур використовуються змінні та покажчики. Формати їх оголошення у С/С++:

тип_структури змінна; // стандарт С++

struct тип_структури змінна; // стандарт С

тип_структури *покажчик.

При використанні покажчиків, вони повинні бути ініціалізовані:

покажчик = &структурна_змінна.

Наприклад,

TStudent stud,*рs;

рs = &stud;

Під час визначення структурної змінної компілятор мови програмування автоматично виділяє об'єм пам'яті, достатній для зберігання всіх членів структури.

Слід зазначити, що розмір структури не завжди дорівнює сумі розмірів її членів: внаслідок вирівнювання об'єктів різної довжини в структурі можуть з'являтися безіменні "дірки". Так, наприклад, якщо змінна типу char займає один байт, а int - чотири байти, то для структури:

struct

{ char c;

int i;

}

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

sizeof(тип_структури).

Змінні-структури і покажчики на структури можна оголошувати і безпосередньо при оголошенні структури:

struct [тип_структури]

{ тип поле_1;

...

тип поле_n;

} змінна, *покажчик;

Наприклад,

struct TStudent

{ сhаr FIO[20];

int year;

} stud,*рs;

рs = &stud;

В реальних задач, зазвичай, здійснюється обробка не окремих структур, а їх масивів:

тип_структури ім’я_масиву[кількість_елементів].

Якщо структура є компонентою масиву, наприклад, коли обробляється структура - масив студентів, то відповідне оголошення може бути представлене так:

TStudent group[25].

У мовах С/С++ структури, як і масиви, можуть оголошуватися і визначатися. Статичну структуру можна ініціалізувати, помістивши слідом за її визначенням список ініціалізаторів для її компонент, укладений у фігурні дужки:

struct [тип_структури]

{ тип поле_1;

...

тип поле_n;

};

тип_структури змінна = {список_ значень};

struct [тип_структури]

{ тип поле_1;

...

тип поле_n;

} змінна = {список_значень};

Наприклад,

struct TStudent

{ сhаr FIO[20];

int year;

};

TStudent stud = {“Іванов”,1995};

struct TStudent

{ сhаr FIO[20];

int year;

} stud = {“Іванов”,1995};

Використання структур в програмі на С/С++ дозволяє працювати з окремими бітами, тобто з розрядами двійкового коду. Для цього використовуються елементи структури типу поля бітів. Формат структури, що містить поля бітів, наступний:

struct [тип_структури]

{ тип поле_1: довжина_в_бітах;

...

тип поле_n: довжина_в_бітах;

};

В якості типу полів можуть використовуватися специфікатори int, unsigned, signed.

Соседние файлы в папке lektsii_OP