«Ни один ремесленник, который стремится к вершинам своей профессии, не примет негодных инструментов; и ни один производитель, который ценит качество работы, не будет упрашивать ремесленника принять их»
12. Тип указатель
Понятие указателя. Типизированные (typed) и нетипизированные (untyped) указатели.
Нетипизированные указатели, объявляемые как имеющие тип Pointer, используются в тех случаях, когда требуется просто сохранить значение адреса. Эти указатели нельзя разыменовывать, так как они не связаны с каким-либо определенным типом данных. Они могут быть использованы, например, для того, чтобы обойти характерную для Паскаля строгость в отношении типов данных:
type PInteger=^integer;
var
I : integer;
R : single;
P : pointer;
begin
R:=123; P:=@R; i:=PInteger(P)^;
end;
Операция взятия адреса @ применима также к подпрограммам. Кроме этой операции при работе с указателями используются стандартные процедуры New, Dispose, GetMem и FreeMem, а также функции Addr и Ptr.
В Object Pascal определены основные типы указателей на символ PAnsiChar и PWideChar, а также родовой тип PChar, которые используются для обработки строк с завершающим нулем. Некоторые другие стандартные типы указателей, определенные в модулях System и SysUtils, приведены в таблице.
Pointer type |
Points to variables of type |
PAnsiString, PString |
AnsiString |
PByteArray |
ByteArray (declared in SysUtils). Used to typecast dynamically allocated memory for array access. |
PCurrency |
Currency |
PExtended |
Extended |
POleVariant |
OleVariant |
PShortString |
ShortString |
PTextBuf |
TextBuf (declared in SysUtils). TextBuf is the internal buffer type in a TTextRec file record.) |
PVarRec |
TVarRec (declared in System) |
PVariant |
Variant |
PWideString |
WideString |
PWordArray |
TWordArray (declared in SysUtils). Used to typecast dynamically allocated memory for arrays of 2-byte values. |
«11. Файловые типы»
13. Процедурные типы