Глава 6. Алгоритмизация и программирование
Операции с указателями
Тип — это всегда два множества: множество значений и множество операций. Значениями переменных типа указатель являются адреса памяти. К указателям применимы операции отношения, их можно сравнивать (равны или неравны, но не меньше или больше). Указатели равны только в случае, если они ссылаются на один и тот же объект, то есть содержат один и тот же адрес.
Существует операция, которая возвращает указатель — адрес первого байта памяти, по которому записана переменная (любого типа) — это:
@<Имя переменной> или функция ADDR (<имя переменной>). Например, @x или ADDR(x).
Различают типизированные и нетипизированные указатели.
Нетипизированные указатели
Таким указателям можно присваивать адрес любой переменной независимо от типа. Нетипизированный указатель обозначается pointer. Используется для данных, структура и тип которых меняются в ходе выполнения программы.
Пример:
Пусть var p,r:pointer; x,y:integer; st:string;
а) p := @x; r := @st; тогда p <> r - true;
б) x := y; p := @x; r := @y; тогда p <> k - true; в) p := @x; r := @x; тогда p = r - true.
Пример «указатель на указатель»:
Type ip:^integer; Var a:ip; a1:^ip; x:integer;
Begin
a:=@x; a1:=@a; a1^^:=10; Writeln(x) {10}
End.
Типизированные указатели
Типизированные указатели содержат адрес, по которому записана переменная заранее определенного типа.