11.4 Операции с указателями
@
= , <> |
—
— |
унарная операция определения адреса, например: PI1 := @i ; ( PI1 — указатель, описанный выше, i — целочисленная переменная ); операции сравнения ( «равно», если указатели ссылаются на один и тот же объект ) |
11.5 Процедуры и функции для работы с указателями и адресами
Ниже через TPобозначена переменная–типизованный указатель, черезP— нетипизованный, если в качестве параметра приведеноTPP, то можно использовать указатель любого типа.
Procedure ...
New ( var TP ) ; | |
— |
создает новую динамическую переменную определенного типа (выделяет для нее память в куче) и устанавливает на нее указатель TP |
Dispose ( var TP ) ; | |
— |
уничтожает динамическую переменную определенного типа (возвращает в кучу фрагмент памяти), на которую указывал указатель TP |
GetMem ( var P, Size : Word ) ; | |
— |
создает новую динамическую переменную указанного размера в Size и устанавливает на нее указатель P (для размещения переменной в куче в точном соответствии с размерностью типа часто используется значение функции SizeOf ) |
FreeMem ( var P, Size : Word ) ; | |
— |
уничтожает динамическую переменную указанного размера в Size , на которую указывал указатель P |
Mark ( var TPP ) ; | |
— |
запоминает в TPP текущее значение указателя кучи HeapPtr (используется совместно с процедурой Release для освобождения части кучи) |
Release ( var TPP ) ; | |
— |
возвращает кучу к тому состоянию, которое было сохранено соответствующим вызовом Mark, т.е. освобождает всю часть кучи, начиная с адреса, сохраненного в TPP при последующих (после Mark) выделениях памяти |
Function ...
Addr ( var X ) : Pointer ; | |
— |
адрес аргумента X, где X — любой объект программы (переменная, процедура, функция), аналог действия операции @ |
Seg ( X ) : Word ; | |
— |
сегмент адреса X, где X — любой объект программы (переменная, процедура, функция) |
Ofs ( X ) : Word ; | |
— |
смещение адреса X, где X — любой объект программы (переменная, процедура, функция) |
Ptr ( Seg, Ofs : Word ) : Pointer ; | |
— |
преобразует в значение типа Pointer адрес, заданный сегментом Seg и смещением Ofs |
MaxAvail : LongInt ; | |
— |
размер наибольшего непрерывного свободного участка кучи |
MemAvail : LongInt ; | |
— |
размер в байтах общего свободного пространства кучи |
SizeOf ( X ) : Word ; | |
— |
размер аргумента в байтах, где X — переменная любого типа или любой тип |