Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 2).doc
Скачиваний:
98
Добавлен:
15.04.2015
Размер:
2.24 Mб
Скачать

Указатели

Работа с динамической памятью осуществляется с помощью величин, называемых указателями. Значение указателя – адрес участка памяти, в котором может располагаться переменная или подпрограмма.

В Турбо Паскале различают типизированные и нетипизированные указатели. Синтаксическая форма описания типизированного указателя:

^BaseТуре,

где ^ – синтаксический атрибут (символ каре);

BaseType – идентификатор любого базового типа.

Замечание: в Турбо Паскале действует принцип – любой идентификатор может использоваться только после его определения. Для идентификатора базового типа сделано исключение — его можно определять после использования в описании указателя; указанное исключение позволяет создавать списковые структуры данных в динамической памяти.

Описание ^BaseТуре может использоваться и в разделе программы type для описания идентификатора типа, и в разделе var для описания конкретных переменных-указателей.

Пример 1.

type

TArray=Array[1..10] of Real;

РАггау=^ТАггау;

var

p1: PArray;

p2: ^Real; p3: ^integer;

Типизированные указатели могут использоваться для хранения адресов объектов только базового типа.

Нетипизированные указатели могут использоваться для хранения адресов объектов любого типа. Они описываются с помощью ключевого слова Pointer.

Пример 2

var

р1, р2: Pointer;

Операция для получения адреса

Операция получения адреса является унарной, кодируется символом @ (коммерческое ИЛИ) и имеет следующую синтаксическую форму:

@Х

где Xидентификатор переменной или подпрограммы.

Конструкция @Х представляет собой выражение, тип которого определяется по следующему правилу:

  1. если X – имя переменной, то при использовании опции компилятора {$Т – } выражение @Х имеет тип нетипизированного указателя (Pointer); при использовании опции {$Т+} выражение @Х имеет значение типизированного указателя, базовый тип которого совпадает с типом переменной X;

  2. если Х – имя подпрограммы, то выражение @Х имеет тип нетипизированного указателя (Pointer) не зависимо от установки опции {$Т}.

Функции для работы с адресами

  • function Addr(var X): Pointer;

Возвращает адрес переменной или подпрограммы с именем X. В отличие от операции @ функция Addr(X) всегда возвращает адрес только в виде нетипизированного указателя, не зависимо от установки опции {$Т}.

  • function Ofs(var X): Word;

Возвращает значение смещения переменной или подпрограммы с именем X.

  • function Seg(var X): Word;

Возвращает значение сегмента переменной или подпрограммы с именем X.

  • function Ptr(Segment, Offset: Word): Pointer;

Формирует адрес объекта на основе отдельно задаваемых значений сегмента Segment и смещения Offset. Очевидно тождество: Ptr(Seg(X), Ofs(X))=Addr(X).

  • function MaxAvail: Longint;

Возвращает размер наибольшего непрерывного свободного участка памяти в куче.

  • function MemAvail: Longint;

Возвращает размер свободной памяти в куче (сумму размеров всех непрерывных свободных участков).

  • function CSeg: Word;

  • function DSeg: Word;

  • function SSeg: Word;

  • function SPtr: Word;

Возвращают текущие значения регистров процессора СS, DS, SS и SP соответственно.

Соседние файлы в папке WORD