Очень часто указатели используют для косвенного обращения к большим структурам данных, повышая скорость и сокращая затраты на организацию доступа. Пример. Для работы с книжными индексами введем типы данных:
Для работы с элементами введем указательный тип type у_элемент = Тэлемент;
и объявим два указателя этого типа
var e, f : у_элемент; (* выделение памяти под указатели *)
Выделение памяти под структуры производится с применением оператора new: new (e); (* выделение памяти под структуру *) new (f); (* выделение памяти под структуру *)
Далее в программе каждая из структур наполняется информацией, содержание которой иллюстрируют рис. 11.7 и 11.8.
Рис. 11.8. Содержание структуры, адресуемой указателем f
Оценим эффективность созданной системы доступа к сложным структурам данных.
288
Глава 11. Указатели
Перестановка указателей и перемещение данных
Перестановка указателей требует значительно меньше работы, чем перестановка записей, на которые они ссылаются.
Рис. 11.9. Организация перекрестной адресации
На рис. 11.9 мы минимальными усилиями обеспечили перекрестную адресацию.
Рис. 11.10. Повышение надежности доступа к важной информации
На рис. 11.10 показано альтернативное решение: мы усилили надежность доступа к какой-то очень важной информации. Теперь эту запись обслуживают два указателя. Все эти действия выполняются очень быстро.
Рис. 11.11. Перемещение данных из одной области в другую область памяти
А вот на действие, которое иллюстрирует рис. 11.11, понадобится много времени. Объяснение простое: через механизм разыменования здесь инициирован процесс действительной пересылки большого количества элементов данных.