Динамическая память - это оперативная память компьютера, предоставляемая программе при ее работе. Динамическое размещение данных означает использование динамической памяти непосредственно при работе программы. В отличие от этого статическое размещение осуществляется компилятором Object Pascal в процессе компиляции программы. При динамическом размещении заранее не известны ни тип, ни количество размещаемых данных.
Указатели
Указатель (pointer) – это переменная, которая в качестве своего значения содержит адрес первого байта памяти, занимаемой некоторой переменной.
Как правило, указатель связывается с некоторым типом данных. Такие указатели называют типизированными. Для объявления типизированного указателя используется значок ^, который помещается перед соответствующим типом, например:
Var
p1 : ^Integer; {указатель на переменную целого типа}
р2 : ^Real; {указатель на переменную целого типа}
Нетипизированные указатели объявляются без связывания с каким-либо конкретным типом данных. Для этого служит стандартный тип pointer, например:
Var
р: pointer; {нетипизированный указатель}
Нетипизированные указатели применяются для динамического размещения данных, структура и тип которых меняется в ходе работы программы.
Несмотря на то, что значениями указателей являются адреса переменных в памяти, в Object Pascal можно передавать значения только между указателями, связанными с одним и тем же типом данных. Например,
Var
pI1, pI2: ^integer;
pR: ^Real;
p: Pointer;
Begin
pI1 := pI2; {верно}
pl1 :=pR; {неверное присваивание}
end;
Однако, такое ограничение не распространяется на нетипизированные указатели, поэтому следующая конструкция будет правильной: