Представление указателей в языках программирования

В программе на языке высокого уровня указатели могут быть

типизированными и нетипизированными.

При объявлении типизированного указателя определяется и тип

объекта в памяти, адресуемого этим указателем. Так например, объ-

явления в языке PASCAL: Var ipt : ^integer; cpt : ^char;

или в языке C: int *ipt; char *cpt;

означают, что переменная ipt представляет собой адрес области па-

мяти, в которой хранится целое число, а cpt - адрес области памя-

ти, в которой хранится символ. Хотя физическая структура адреса

не зависит от типа и значения данных, хранящихся по этому адресу,

компилятор считает указатели ipt и cpt имеющими разный тип, и в

Pascal оператор: cpt := ipt;

будет расценен компилятором как ошибочный (компилятор C для ана-

логичного оператора присваивания ограничится предупреждением).

Таким образом, когда речь идет об указателях типизированных, пра-

вильнее говорить не о едином типе данных "указатель", а о целом

семействе типов: "указатель на целое", "указатель на символ" и

т.д. Могут быть указатели и на более сложные, интегрированные

структуры данных, и указатели на указатели.

Нетипизированный указатель - тип pointer в Pascal или void *

в C - служит для представления адреса, по которому содержатся

данные неизвестного типа. Работа с нетипизированными указателями

существенно ограничена, они могут использоваться только для сох-

ранения адреса, обращение по адресу, задаваемому нетипизированным

указателем, невозможно.