Этот шаг посвящен описанию классификации переменных и объяснению того, зачем же
все-таки нужны указатели.
Все переменные, используемые в программе, размещаются в памяти согласно вполне определенным правилам:
Таким образом, распределение памяти во всех этих случаях производится полностью автоматически и подчинено стековой дисциплине. Переменные, память, под которые распределяется описанным образом, называются статическими.
Кроме этого язык программирования Pascal дает возможность образовать новые переменные в любой момент работы программы без учета ее статической структуры, сообразуясь с потребностями решаемой задачи. Точно так же допускается уничтожение созданных переменных в произвольный момент выполнения программы. Переменные, созданием и уничтожением которых явно может управлять программист, называются динамическими переменными.
Естественным средством доступа к статическим переменным являются идентификаторы этих переменных (статическая переменная всегда описана в некотором блоке). Динамические переменные, количество которых и место расположения в памяти заранее не известно, невозможно обозначить идентификаторами. Поэтому единственным средством доступа к динамическим переменным является указатель на место их текущего расположения в памяти. На принципе обращения к динамическим переменным посредством указателей (ссылок) на них и основаны все соответствующие средства языка Pascal.
Для распределения памяти под локальные переменные отводится специальный сегмент оперативной памяти (сегмент стека). Аналогично, образование динамических переменных реализуется в другой области памяти, которая существует отдельно от стекового сегмента и называется кучей (heap) или динамической областью памяти.
В заключение приведем общую схему размещения в памяти статических и динамических переменных (рис.1):
Рис.1. Расположение статических и динамических переменных
В связи с тем, что сегмент данных имеет ограниченные размеры, то вполне вероятна
ситуация нехватки памяти для размещения статических переменных. В этом случае данные
можно располагать в "куче", так как чаще всего ее размер больше, чем сегмент данных.
На следующем шаге мы рассмотрим механизм создания и уничтожения динамических
переменных.