Краткое изложение теоретического материала
Статические и динамические переменные
Переменные в тексте программы описываются в разделе описания переменных. Например:
Var a, b: integer;
s: string;
m: array [1..100] of real;
Такие «обычные» статические переменные располагаются в части оперативной памяти компьютера, называемой сегментом данных (64 Кб). Перед исполнением программы в сегменте данных резервируются участки памяти, размер которых соответствует типу переменных, описанных в разделе описания переменных (VAR).
Кроме того, программист имеет возможность использовать в своей программе динамические переменные, память для которых резервируется уже в процессе исполнения программы и затем, если в них больше нет необходимости, может быть освобождена. Такие переменные располагаются в другой части оперативной памяти компьютера. Такая динамически распределяемая память называется кучей (Heap-областью).
Необходимость в использовании динамических переменных возникает в следующих случаях:
1. Программа должна обрабатывать большие объемы данных (более 64 Кб).
|
|
|
2. Программа должна обрабатывать данные, объем памяти для хранения которых заранее неизвестен.
3. Тип обрабатываемых данных заранее неизвестен.
4. Программа использует динамические структуры данных (стек, очередь, двунаправленный список, дерево, граф и т.п.).
При работе с динамическими переменными возникает необходимость работы с данными ссылочного типа, или указателями.
Указатели
Указатель – это переменная целого типа, которая интерпретируется как адрес какого-либо элемента данных (переменной, константы, адреса другого элемента данных). Т.е. указатель – это адрес. Кроме этого, употребляют термин ссылка. Это синонимы.
В языке Паскаль существует возможность получить значение адреса любой переменной, как статической, так и динамической. Это можно сделать посредством функции Addr.
Например, после исполнения команды присваивания
p:= Addr (a);
в переменную p будет записан адрес [1] переменной a. Вместо функции Addr можно использовать оператор @. То есть, вместо записанной выше команды можно написать:
p:= @a;
В языке Турбо Паскаль указатели бывают двух видов – типизированные и нетипизированные.