Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Хотя значениями ссылочных типов, образованных от любого базового типа, являются адреса в памяти прямое присваивание значений разнотипных указателей запрещено. Пусть, например, имеется описание:
var x, y: ^integer; z: ^real;
Допустимы присваивания однотипных указателей:
x:=y;
И не допустимы присваивания:
x:=z; z:=y;
Чтобы обойти это ограничение можно описать указатель, не связанный с определенным типом данных. Для этого существует тип Pointer.
var p: Pointer;
Нетипизированные указатели совместимы с любыми типизированными укзателями. Соответственно допустимо:
p:=x; z:=p;
После таких присваиваний x и z содержат один и тот же адрес памяти. Однако содержимое этой памяти будет интерпретироваться по-разному: x^ — как целое, z^ — как вещественное число.
Следующий раздел:
Предыдущий раздел:
Тут ошибка:
Да, мы передали через pointer адрес от одного указателя к другому, но если вы теперь вызовете z^, то получите полную ерунду! Это связано с тем, что типизированные указатели применяю к данным в памяти свою разрядную сетку, а у целого и вещественного числа она существенно отличается!