
- •25. Программный модуль
- •26Указатели в Паскале. Динамическая память на языке Паскаль
- •Ссылочные типы. Указатели в Паскале
- •Операции с указателями
- •Процедуры и функции для работы с указателями и адресами в Паскале
- •27. Динамические структуры данных | Связные списки
- •1 Связное представление данных в памяти
- •2 Связные линейные списки
- •2.1 Машинное представление связных линейных списков
- •2.2 Реализация операций над связными линейными списками
- •3. Нелинейные разветвленные списки
- •3.1 Основные понятия
- •3.2 Представление списковых структур в памяти.
- •3.3 Операции обработки списков
- •28. Стек и очередь
- •29. Системы программирования
- •30. Языки программирования
- •33. Накопители на гибких магнитных дисках
- •35Видеосистема персонального компьютера.
- •История
- •Технический обзор
- •Новые возможности по сравнению с Си
- •Не объектно-ориентированные возможности
- •Стандартная библиотека
- •Объектно-ориентированные особенности языка
- •Проблемы старого подхода
- •Инкапсуляция
- •Описание функций в теле класса
- •Конструкторы и деструкторы
- •Другие возможности функций-членов
- •Наследование
- •Полиморфизм
- •Будущее развитие
- •История названия
- •Пример №1
- •Пример №2
- •Пример №3
- •Пример №4
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •5.3.1. Символьные типы
- •5.3.2. Числовые типы
- •5.3.3. Типы дата/время
- •5.3.4. Двоичные типы
- •5.3.5. Пользовательские типы данных
- •2. [Проверка домашнего задания]
- •3. Актуализация знаний и умений учащихся по пройденному материалу
- •5. Реализация, составление алгоритмов с использованием повторения. Графика в программе Паскаль авс.
- •6. Ребус. Правильная осанка
- •9*. Тестирование
- •Операции над строками
- •Операции над строками
- •2. Объединения
- •Комбинированные типы. Записи
- •Обработка записей в Паскале
- •Оператор присоединения в Паскале
- •Вввод / вывод записей в Паскале
- •Примеры программ
25. Программный модуль
Программа строится на основе программных модулей. Модуль состоит из элементов программного модуля. В модуле нет ничего, кроме инструкций препроцессора и (или) списков операторов.
Как сказано в справочном руководстве по C++, файл состоит из последовательности объявлений.
Здесь нет ничего странного: определение является частным случаем объявления (например, объявление, содержащее инициализацию).
Сложность оператора практически ничем не регламентируется, к ним, в частности, относятся объявления и определения объектов, объявления (или прототипы) и определения функций.
В свою очередь, функция состоит из заголовка, который включает спецификаторы объявления, описатели и инициализаторы и тела.
Тело функции представляет собой блок операторов - список операторов (опять!), заключаемый в фигурные скобки
26Указатели в Паскале. Динамическая память на языке Паскаль
|
В ТР имена объектов (переменных и др.) д. б. определены до момента использования их в программе. Как отмечалось ранее, ОП персонального компьютера имеет сегментную структуру. Адрес – совокупность двух 16-ти разрядных слов - сегмента и смещения. (Например: $0060:$01А0).Сегмент - участок памяти, имеющий максимальную длину 64К (65536 байт). Начальный адрес каждого сегмента кратен 16 (т.е. 0, 16, 32, и т.д.), следовательно, два сегмента отстоят друг от друга, по крайней мере, на 16 байт. Сегменты адресуют память с точностью до параграфа. Параграф – фрагмент памяти равный 16 байт. Смещение – линейная адресация в сегменте. Она также имеет 16-ти разрядные адреса и адресует память с точностью до байта. При этом глобальные переменные и типизированные константы размещаются в сегменте данных. Такие переменные называются статическими, а память, выделяемая компилятором для их хранения называется статической памятью.
Локальные переменные размещаются в памяти динамически при активизации подпрограммы. После выполнения подпрограммы память освобождается.
Память, которая выделяется под локальные переменные, называется сегментом стека. Она задается директивой {$M<размер памяти>}. Минимальный размер памяти 1К, максимальный 64К, по умолчанию 16к.
В ТР существует возможность создавать новые переменные в момент работы программы или уничтожать их в соответствие с требованиями задачи. Такие переменные называются динамическими.
Для динамических переменных отводится динамическая память, которая имеет стековую структуру и называется «кучей» (хипом – Heap-куча). Размер хипа задается директивой {$M<размер памяти>}.
Доступ к статическим переменным осуществляется через их имена. Доступ к динамическим переменным осуществляется через указатель на место их расположения в памяти. Многие практические задачи трудно или невозможно решить без использования динамической памяти. Например, обработки массивов больших объемов (более 65536 байт).
Ссылочные типы. Указатели в Паскале
Указатель – это переменная, которая содержит адрес другой переменной (байта памяти). В ТР имеется два вида указателей: указатель на объект некоторого типа (типизированный) и указатель, не связанный с типом. Описание указателей.
Для объявления типизированных указателей используется значок ^, который помещается перед соответствующим типом:
Type T = ^T1; Var A :T; где: T – имя типа; T 1 - базовый тип (любой в т.ч. указатель); ^ - указатель. Примеры: Var a :byte; {выделение памяти для переменной где хранится ее значение} a ;^byte; {выделение памяти для переменной где хранится ее адрес}
Var p1 :^integer; p2, p3 :^real;
Для объявления переменных не связывая их, с каким либо типом данных можно использовать указатель без типа (pointer). Var p :pointer; где: pointer - не типизированный указатель, который занимает в памяти 4 байт (2-байта сегмент, 2байта смещение.).