Доступ к переменной по указателю

Для доступа к переменной имеются две возможности: первая - использовать идентификатор переменной, вторая - воспользоваться адресом этой переменной, который содержится в указателе на эту переменную.

Например, чтобы увеличить значение переменной I, на которую указывает указатель Р: по первому способу можно записать: I:=I+2. Для реализации второго, косвенного доступа к переменной по указателю, используется разыменование указателя. Правило разыменования таково: для того чтобы по указателю на переменную получить доступ к самой переменной, нужно после переменной-указателя поставить знак ^. Так, запись: Writeln(Int2^) означает напечатать значение переменной, на которую ссылается указатель Int2. Поэтому чтобы увеличить значение переменной I, на которую указывает указатель Р, используя косвенный доступ к переменной по указателю, можно записать: Р ^:= P^ + 2.

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

Управление динамической памятью

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

Начало кучи хранится в стандартной переменной HeapOrg, конец - в переменной HeapEnd. Текущую границу незанятой динамической памяти указывает указатель HeapPtr.

Для управления кучей используются следующие стандартные процедуры и функции.

Процедуры динамического распределения

Dispose Уничтожает динамическую переменную

FreeMem Уничтожает динамическую переменную данного размера

GetMem Создает новую динамическую переменную заданного размера и устанавливает переменную-указатель для нее

Mark Записывает в переменной-указателе состояние кучи

New Создает новую динамическую переменную и устанавливает на нее переменную-указатель

Release Возвращает кучу в заданное состояние

Функции динамического распределения

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

MemAvail Возвращает количество имеющихся в куче свободных байтов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: