
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Указатели
Работа с динамической памятью осуществляется с помощью величин, называемых указателями. Значение указателя – адрес участка памяти, в котором может располагаться переменная или подпрограмма.
В Турбо Паскале различают типизированные и нетипизированные указатели. Синтаксическая форма описания типизированного указателя:
^BaseТуре,
где ^ – синтаксический атрибут (символ каре);
BaseType – идентификатор любого базового типа.
Замечание: в Турбо Паскале действует принцип – любой идентификатор может использоваться только после его определения. Для идентификатора базового типа сделано исключение — его можно определять после использования в описании указателя; указанное исключение позволяет создавать списковые структуры данных в динамической памяти.
Описание ^BaseТуре может использоваться и в разделе программы type для описания идентификатора типа, и в разделе var для описания конкретных переменных-указателей.
Пример 1.
type
TArray=Array[1..10] of Real;
РАггау=^ТАггау;
var
p1: PArray;
p2: ^Real; p3: ^integer;
Типизированные указатели могут использоваться для хранения адресов объектов только базового типа.
Нетипизированные указатели могут использоваться для хранения адресов объектов любого типа. Они описываются с помощью ключевого слова Pointer.
Пример 2
var
р1, р2: Pointer;
Операция для получения адреса
Операция получения адреса является унарной, кодируется символом @ (коммерческое ИЛИ) и имеет следующую синтаксическую форму:
@Х
где X – идентификатор переменной или подпрограммы.
Конструкция @Х представляет собой выражение, тип которого определяется по следующему правилу:
если X – имя переменной, то при использовании опции компилятора {$Т – } выражение @Х имеет тип нетипизированного указателя (Pointer); при использовании опции {$Т+} выражение @Х имеет значение типизированного указателя, базовый тип которого совпадает с типом переменной X;
если Х – имя подпрограммы, то выражение @Х имеет тип нетипизированного указателя (Pointer) не зависимо от установки опции {$Т}.
Функции для работы с адресами
function Addr(var X): Pointer;
Возвращает адрес переменной или подпрограммы с именем X. В отличие от операции @ функция Addr(X) всегда возвращает адрес только в виде нетипизированного указателя, не зависимо от установки опции {$Т}.
function Ofs(var X): Word;
Возвращает значение смещения переменной или подпрограммы с именем X.
function Seg(var X): Word;
Возвращает значение сегмента переменной или подпрограммы с именем X.
function Ptr(Segment, Offset: Word): Pointer;
Формирует адрес объекта на основе отдельно задаваемых значений сегмента Segment и смещения Offset. Очевидно тождество: Ptr(Seg(X), Ofs(X))=Addr(X).
function MaxAvail: Longint;
Возвращает размер наибольшего непрерывного свободного участка памяти в куче.
function MemAvail: Longint;
Возвращает размер свободной памяти в куче (сумму размеров всех непрерывных свободных участков).
function CSeg: Word;
function DSeg: Word;
function SSeg: Word;
function SPtr: Word;
Возвращают текущие значения регистров процессора СS, DS, SS и SP соответственно.