ВУЗ:
Составители:
Рубрика:
9
function f: real;  
begin  
  ...  
end; 
begin 
  a:=@p; 
  b:=f; // равноценно b:=@f 
  a(5); // вызов процедуры через процедурную перемен-
ную a 
  writeln(b); // вызов функции через процедурную пе-
ременную b 
end.   
1.3  Указатели pointer  
Бестиповые указатели pointer хранят адрес памяти, не связанный с объек-
том определенного типа, и не могут быть разыменованы. Чтобы воспользоваться 
данными по этому адресу, бестиповой указатель следует преобразовать к указате-
лю на конкретный тип. Например: 
type pinteger = ^integer; 
     preal =^real; 
var i: integer; 
    r: real; 
    p: pointer; 
begin 
  p:=@i; 
  pinteger(p)^:=5; 
  writeln(pinteger(p)^); 
  p:=@r; 
  preal(p)^:=3.14; 
  writeln(preal(p)^); 
end. 
Рассмотрим  запись  pinteger(p)^  подробнее.  Здесь  перед доступом к
  данным 
по указателю p мы вначале преобразуем его к указателю на integer, а потом ра-
зыменовываем. Поскольку перед обращением к pinteger(p)^ было выполнено 
присваивание  p:=@i,  то  выражение  pinteger(p)^  становится  синонимом 
имени i и может быть использовано как в левой, так и в правой части оператора 
присваивания. 
Гибкость указателей pointer имеет 
обратную сторону: их применение по-
тенциально опасно и может приводить  к ошибкам, причину которых сложно ус-
тановить. Например, в результате выполнения кода  
Страницы
- « первая
 - ‹ предыдущая
 - …
 - 5
 - 6
 - 7
 - 8
 - 9
 - …
 - следующая ›
 - последняя »
 
