Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

3.3.6. Записи

Запись (record), также часто называемая структурой, представляет собой набор данных различных типов, объединенный общим именем. Отдельные данные записи называются полями. Тип записи объявляется следующим образом:

type <имя типа> = record

<список имен полей> : <тип>;

...

<список имен полей> : <тип>;

end;

Например, определим запись и переменные этого типа:

type

TPers= record

Fam,Name : String[15]; // фамилия, имя

Year : Integer; // год рождения

end;

var Pers, Pers1 : TPers;

Можно объявлять запись и непосредственно в объявлении переменной, не прибегая специально к объявлению типа.

Доступ к отдельным полям записи осуществляется указанием на соответствующую переменную типа записи и после символа точки "." – имени поля. Например, Pers.Fam:= 'Иванов'. При групповых операциях с полями удобно использовать оператор With..do, позволяющий не указывать перед каждым полем имя переменной типа записи.

Могут быть определены более сложные записи с вариантной частью. Основная цель указания вариантной части – экономия памяти. Синтаксис такого объявления следующий:

type <имя типа записи> = record

<список имен полей> : <тип>;

...

<список имен полей> : <тип>;

case <тег>: <порядковый тип> of

<список констант>: (<вариант 1>);

...

<список констант>: (<вариант 2>);

end;

Первая часть этого объявления до ключевого слова case не отличается от того, что было описано ранее. За словом case следует не обязательный элемент тег – произвольный допустимый идентификатор. Он вводится только для удобства и может быть пропущен вместе с последующим двоеточием. Затем указывается любой порядковый тип. После слова of следуют строки со списком констант указанного порядкового типа, завершающиеся двоеточиями. После двоеточия в круглых скобках с необязательной завершающей точкой с запятой записываются поля соответствующего варианта. Эти поля представляются в форме, аналогичной основным полям структуры. В полях вариантов нельзя использовать типы длинных строк, динамических массивов, variant, а также структуры, содержащие поля этих типов. Тег и списки констант вводятся просто для удобства программирования. Никакой смысловой нагрузки они не несут, а просто помогают разобраться, к чему относится каждый вариант. Константы в списках не должны повторяться. Поля различных вариантов размещаются в одной и той же области памяти, перекрывая друг друга. Размер этой перекрываемой области компилятор выбирает по размеру, необходимому для наиболее объемного варианта.

В записи могут быть поля, содержащие указатели на другие аналогичные записи. Такие записи называются самоадресуемыми и используются для организации в динамически распределяемой области памяти списков структур. Приведем пример подобной самоадресуемой структуры.

Type trec=^rec;

rec=record

in1,in2:word;

s:string[10];

pr:trec // указатель на структуру типа trec

end;

Подобное описание является исключением из общего правила языка Pascal, по которому нельзя использовать в предложениях еще не объявленные типы и переменные. В данном случае первое предложение объявляет тип trec как указатель на структуру типа, объявленного после этого. Сразу за этим предложением следует объявление самой структуры. В этом объявлении имеется поле pr, представляющее собой указатель на структуру аналогичного вида.