Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Использование нетипизированных указателей ограничено стандартными функциями, принимающими такие переменные в качестве параметров, а также низкоуровневым программированием. Более интересными для рассмотрения являются типизированные указатели.
Для описания типизированной ссылки не предусмотрен какой-либо специальный тип данных, в отличие от нетипизированных указателей, имеющих тип Pointer. Поскольку ссылочная переменная такого рода всегда указывает на данные конкретного типа, то ее описание и строится на основе этого типа. Для указания на ссылочную природу переменных используется оператор «^», и описание выглядит следующим образом:
Var
<Переменная>: ^<Название типа>;
Или в разделе описания типов данных:
Туре
<Новый тип данных> = ^ <Тип данных>;
После описания переменной-указателя под нее выделяется память только для хранения адреса, а под сами данные, на которые переменная указывает, память не выделяется. Для инициализации переменной используется процедура New(), отличием которой от аналогичной процедуры GetMem(), используемой для работы с нетипизированными указателями, является отсутствие второго параметра, определяющего размер выделяемой памяти. Это связано с тем, что типизированная ссылка указывает на данные известного типа, соответственно, размер этих данных также известен компилятору.
Итак, инициализация переменной выглядит следующим образом:
New(<Типизированный указатель>);
Соответственно, при освобождении памяти, занятой под типизированный указатель, используется процедура Dispose() — аналог процедуры FreeMem без второго параметра:
Dispose(<Типизированный указатель>);
Обращение к переменной-указателю происходит обычным образом — по ее имени, а для обращения к данным, на которые переменная указывает, после имени переменной указывается оператор разыменовывания «^»:
<Название переменной>^
Рассмотрим пример работы с типизированной ссылкой, указывающей на переменную типа Double (см. листинг 2.9).
Листинг 2.9. Пример работы с типизированной ссылкой
Program UsingTypedPointers;
Type
pDouble = ^Double; {Описание типа данных — указателя
на переменную типа Double}
Var
MyPDouble: pDouble; {Описание переменной — типизированного
указателя на переменную типа Double}
Begin
New(MyPDouble); {Выделение места в динамической памяти под одну
переменную типа Double (размер необходимой памяти
определяется автоматически), адрес выделенной
памяти заносится в переменную MyPDouble}
MyPDouble^ = 12.8; {Присвоение переменной, на которую ссылается
переменная-указатель значения 12.8}
Dispose(MyPDouble); {Освобождение памяти, занятой под переменную,
на которую указывает переменная MyPDouble. Адрес
освобожденной памяти остается в переменной
MyPDouble, но его использование недопустимо}
End.
Дата публикования: 2014-11-02; Прочитано: 996 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!