Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК№15.doc
Скачиваний:
4
Добавлен:
24.08.2019
Размер:
72.7 Кб
Скачать

Var X : word; { переменная }

pw : ^word; { указатель на величины типа word }

...

pw := @w; { или pw := addr(w); }

Для обращения к значению переменной, адрес которой хранится в указателе, примеряется операция разадресации (разыменования), обозначаемая с помощью символа ^:

pw^ := 2; inc(pw^); writeln(pw^);

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

Стандартные функции для работы с указателями:

  • addr(x) : pointer – возвращает адрес х (аналогично операции @), где х — имя переменной или подпрограммы;

  • seg (x) : word – возвращает адрес сегмента для х;

  • ofs (x) : word – возвращает смещение для х;

  • cseg : word – возвращает значение регистра сегмента кода CS;

  • dseg : word – возвращает значение регистра сегмента данных DS;

  • ptr (seg, ofs : word) : pointer – по заданному сегменту и смещению формирует адрес типа pointer.

Переменные типа указатель не могут быть элементами списка ввода-вывода.

3. Динамические переменные

Статической переменной (статически размещенной) называется описанная явным образом в программе переменная, обращение к ней осуществляется по имени. Место в памяти для размещения статических переменных определяется при компиляции программы.

В отличие от таких статических переменных в программах, написанных на языке Turbo Pascal, могут быть созданы динамические переменные. Основное свойство динамических переменных заключается в том, что они создаются и память для них выделяется во время выполнения программы.

Размещаются динамические переменные в динамической области памяти (heap-области).

Динамическая переменная не указывается явно в описаниях переменных и к ней нельзя обратиться по имени. Доступ к таким переменным осуществляется с помощью указателей и ссылок.

Работа с динамической областью памятью в Turbo Pascal реализуется с

помощью процедур и функций:

Процедура New( var p: Pointer ) выделяет место в динамической области памяти для размещения динамической переменной p^ и ее адрес присваивает указателю p.

Процедура Dispose( var p: Pointer ) освобождает участок памяти, выделенный для размещения динамической переменной процедурой New, и значение указателя p становится неопределенным.

Процедура GetMem( var p: Pointer; size: Word ) выделяет участок памяти в heap-области, присваивает адрес его начала указателю p, размер участка в байтах задается параметром size.

Процедура FreeMem( var p: Pointer; size: Word ) освобождает участок памяти, адрес начала которого определен указателем p, а размер – параметром size. Значение указателя p становится неопределенным.

Процедура Mark( var p: Pointer ) записывает в указатель p адрес начала участка свободной динамической памяти на момент ее вызова.

Процедура Release( var p: Pointer ) освобождает участок динамической памяти, начиная с адреса, записанного в указатель p процедурой Mark, то есть очищает ту динамическую память, которая была занята после вызова процедуры Mark.

Функция MaxAvail: Longint возвращает длину в байтах самого длинного свободного участка динамической памяти.

Функция MemAvail: Longint полный объем свободной динамической памяти в байтах.

Вспомогательная функция SizeOf( X ): Word возвращает объем в байтах, занимаемый X, причем X может быть либо именем переменной любого типа, либо именем типа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]