Чет про программирование / 12) Записи в ЯП Паскаль
.docxЗаписи в ЯП Паскаль
Запись — это составной тип данных, состоящий из фиксированного числа элементов одного или нескольких типов. Описание типа записи начинается словом record и заканчивается словом end. Между ними заключен список элементов, называемых полями, с указанием идентификаторов полей и типа каждого поля:
-
type TPerson = record FirstName: string[20]; // имя LastName: string[20]; // фамилия BirthYear: Integer; // год рождения end;
Идентификаторы полей должны быть уникальными только в пределах записи. Допускается вложение записей друг в друга, т.е. поле записи может быть в свою очередь тоже записью.
Чтобы получить в программе реальную запись, нужно создать переменную соответствующего типа:
Идентификаторы полей должны быть уникальными только в пределах записи. Допускается вложение записей друг в друга, т.е. поле записи может быть в свою очередь тоже записью.
Чтобы получить в программе реальную запись, нужно создать переменную соответствующего типа:
-
var Friend: TPerson;
Записи можно создавать и без предварительного описания типа, но это делается редко, так как мало отличается от описания полей в виде отдельных переменных.
Доступ к содержимому записи осуществляется посредством идентификаторов переменной и поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Friend, нужно записать:
-
Friend.FirstName := 'Alexander'; Friend.LastName := 'Ivanov'; Friend.BirthYear := 1991;
Обращение к полям записи имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более 5 символов. Для решения этой проблемы в языке Delphi предназначен оператор with, который имеет формат:
-
with <запись> do <оператор>;
Однажды указав имя записи в операторе with, можно работать с именами ее полей как с обычными переменными, т.е. без указания идентификатора записи перед идентификатором поля:
-
with Friend do begin FirstName := 'Alexander'; LastName := 'Ivanov'; BirthYear := 1991; end;
Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например,
-
Friend := BestFriend;
После выполнения этого оператора значения полей записи Friend станут равными значениям соответствующих полей записи BestFriend.
Представление записей в памяти
В памяти ПК записи представляются в линейном виде, то есть память выделяется подряд под каждое из полей соответствующего типа. Однако:
-
type
rec = record
x, y: integer;
a: array[1..1] of byte;
end;
var
a: rec;
begin
writeln(sizeof(a)); // 12
end.
Размер данной записи должен составлять 10 Байт, однако компилятор осуществляет выравнивание – оставление пустых байт для выравнивания по границам слов для ускорения. Машинное слово – наименьшая единица информации, с которой работает ПК (разрядность).