Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R8_Зап_12.doc
Скачиваний:
4
Добавлен:
21.12.2018
Размер:
182.27 Кб
Скачать

Фізичне представлення запису

У пам'яті комп’ютера запис може зберігатися одним із двох способів:

  1. у вигляді послідовності полів, що займають безперервну область пам'яті (рис. 1), причому перше поле зберігається у молодших адресах пам'яті. При такій організації досить мати один покажчик на початок області і зсув відносно початку. Це дає економію пам'яті, але зайву витрату часу на обчислення адрес полів запису.

Рис. 1. Представлення в пам'яті змінної типу record у вигляді послідовності полів

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

Структура зберігання в пам'яті зв'язного списку з покажчиками на елементи наведена на рис. 2.

Рис. 2. Представлення в пам'яті змінної типу record у вигляді зв'язного списку.

 Для економії об'єму пам'яті, що відводиться під запис, значення деяких його полів зберігаються в самому дескрипторі, замість покажчиків, тоді в дескрипторі мають бути записані відповідні ознаки. Відповідно до загального підходу мови C дескриптор запису (у цій мові записи називаються структурами) не зберігається до виконання програми. Поля структури просто розташовуються в суміжних слотах пам'яті, звернення до окремих полів замінюються на їх адреси ще на етапі компіляції.

Оголошення комбінованих типів

У різних мовах програмування передбачені різні синтаксичні правила для задання комбінованих типів даних. Відповідна БНФ-нотація для мови Pascal має вид:

оголошення запису ::= record список полів : тип {; список полів:тип}end;

список полів ::= ім’я поля{, ім’я поля}

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

record

список полів_1 : тип;

. . .

список полів_n : тип;

end;

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

Наприклад, оголошення структури stud з компонентами FIO, group, year, adres :

Type

TGroup = (ІP-01, ІP-02);

TStudent = record

FIO : string [50];

group : TGroup;

year : 1980 .. 1989;

adres : string;

end;

var stud : TStudent;

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

Type

TStudent = record

FIO : string [50];

group : TGroup;

marks : record

Matem, VT, Physic : 2 .. 5;

end;

year : 1980 .. 1989;

adres : string;

end;

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

var group : array [1..25] of TStudent; { група студентів}

Формат опису структури у мові С:

struct тип структури>

{ тип поле_1;

...

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

};

Наприклад,

struct TStudent

{ сhаr FIO[20];

сhаr *group;

int year;

};

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

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

{ тип поле_1;

...

тип поле_n;

};

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

{ тип поле_1;

...

тип поле_n;

};

тип_структури змінна;

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

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

{ тип поле_1;

...

тип поле_n;

}змінна;

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

{ тип поле_1;

...

тип поле_n;

}*покажчик;

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

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

Наприклад,

struct TStudent

{ сhаr FIO[20];

int year;

};

TStudent stud,*рs;

рs = &stud;

struct TStudent

{ сhаr FIO[20];

int year;

} stud,*рs;

рs = &stud;

У мові С структури, як і масиви, можуть оголошуватися і визначатися.

Формати визначення структур:

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

{ тип поле_1;

...

тип поле_n;

};

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

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

{ тип поле_1;

...

тип поле_n;

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

Наприклад,

struct TStudent

{ сhаr FIO[20];

int year;

};

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

struct TStudent

{ сhаr FIO[20];

int year;

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

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