и специальный синтаксис как для
раздел 8.3). Предусмотрен и специальный синтаксис как для объявления указателя, так и для
переменной с алиасом:
type Ptr is access all Integer; -- Ptr может указывать на алиас
C |
P: Ptr := I'Access; -- Создать алиас
Первая строка объявляет тип, который может указывать на целочисленную переменную с алиасом, вторая строка объявляет такую переменную, и третьястрока объявляет указатель и инициализирует его адресом переменной. Такие типы обобщенного доступа и переменные с алиасом могут быть компонентами массивов и записей, что позволяет построить связанные структуры, не обращаясь к администратору памяти во время выполнения.
* Привязка к памяти
В языке С привязка к памяти тривиальна, потому что указателю может быть присвоен произвольный адрес:
C |
*reg = Ox1f1f; /* Присваивание по абсолютному адресу */
Благодаря использованию указателя-константы мы уверены, что адрес в reg не будет случайно изменен.
В Ada используется понятие спецификации представления для явного установления соответствия между обычной переменной и абсолютным адресом:
Ada |
for Reg use at 16#4fOO#; -- Адрес (в шестнадцатеричной системе)
Reg := 16#1 f1 f#; -- Присваивание по абсолютному адресу
Преимущество метода языка Ada состоит в том, что не используются явные указатели.
8.2. Структуры данных
Указатели нужны для реализации динамических структур данных, таких как списки и деревья. Кроме элементов данных узел в структуре содержит один или несколько указателей со ссылками на другие узлы (см. рис. 8.3).

Попытка определить узел неизбежно ведет к рекурсии в определении типа, а именно: запись типа node (узел) должна содержать указатель на свойсобственный тип node.