Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Типизированные указатели



Использование нетипизированных указателей ограничено стандартными функциями, принимающими такие переменные в качестве параметров, а также низкоуровневым программированием. Более интересными для рассмотрения являются типизированные указатели.

Для описания типизированной ссылки не предусмотрен какой-либо специальный тип данных, в отличие от нетипизированных указателей, имеющих тип 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...