В программе на языке высокого уровня указатели могут быть
типизированными и нетипизированными.
При объявлении типизированного указателя определяется и тип
объекта в памяти, адресуемого этим указателем. Так например, объ-
явления в языке PASCAL: Var ipt : ^integer; cpt : ^char;
или в языке C: int *ipt; char *cpt;
означают, что переменная ipt представляет собой адрес области па-
мяти, в которой хранится целое число, а cpt - адрес области памя-
ти, в которой хранится символ. Хотя физическая структура адреса
не зависит от типа и значения данных, хранящихся по этому адресу,
компилятор считает указатели ipt и cpt имеющими разный тип, и в
Pascal оператор: cpt := ipt;
будет расценен компилятором как ошибочный (компилятор C для ана-
логичного оператора присваивания ограничится предупреждением).
Таким образом, когда речь идет об указателях типизированных, пра-
вильнее говорить не о едином типе данных "указатель", а о целом
семействе типов: "указатель на целое", "указатель на символ" и
т.д. Могут быть указатели и на более сложные, интегрированные
структуры данных, и указатели на указатели.
Нетипизированный указатель - тип pointer в Pascal или void *
в C - служит для представления адреса, по которому содержатся
данные неизвестного типа. Работа с нетипизированными указателями
существенно ограничена, они могут использоваться только для сох-
ранения адреса, обращение по адресу, задаваемому нетипизированным
указателем, невозможно.