- •Динамические структуры данных Классификация структур данных
- •Понятие о динамической памяти
- •Адреса и указатели
- •Описание и состояния указателей
- •Работа с указателями в программе
- •Объявление указателя
- •Выделение памяти
- •Работа с информацией (разыменование)
- •Работа с адресом
- •Освобождение памяти
- •Особенности динамических данных
- •Связанные динамические структуры
- •Организация взаимосвязей в связанных динамических данных
- •Основные типы связанных динамических структур
- •Работа с очередью
- •Работа со стеком
- •Создание стека
- •Добавление элемента
- •Удаление элемента стека
Работа с информацией (разыменование)
Операция разыменования – это обращение к содержимому области памяти, адрес которой содержит указатель. Для обозначения этой операции используется символ ^, который приписывается после идентификатора указателя.
Пример 1. Присваивание значение ячейке, на которую ссылается указатель:
a^ :=10;
b^ :=2;
writeln('сумма = ',a^ + b^);
Здесь по адресу, содержащемуся в указателе а, помещаем значение 10:
a |
адрес 1 |
b |
адрес 2 |
a^ |
10 |
b^ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Затем по адресу, содержащемуся в указателе b, помещаем значение 2 :
a |
адрес 1 |
b |
адрес 2 |
a^ |
10 |
b^ |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После этого происходит обращение к значениям, находящимся по адресу указателя а (а^) и по адресу указателя b (b^). Эти значения складываются и выводятся на экран. Результат – 12.
Пример 2. Копирование значения ячейки, на которую ссылается указатель:
a^:=b^;
При этом получается такое состояние ячеек:
a |
адрес 1 |
b |
адрес 2 |
a^ |
2 |
b^ |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Работа с адресом
Все действия с адресом (значением указателя) необходимо выполнять осторожно, так как они могут привести к потере информации из-за уничтожения ее адреса.
Копирование адреса.
a:=b;
Оба указателя начинают ссылаться на один и тот же адрес. Результат:
a |
адрес 2 |
b |
адрес 2 |
|
2 |
a^ b^ |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
После такого действия теряется доступ к ячейке, на которую первоначально ссылался указатель а.
Сравнение. Сравнивать указатель можно только с указателем того же типа или с константой – Nil. После выполнения действия выше операция A = B даст значение True, операция A = Nil даст значение False.
