- •Оглавление
- •Введение
- •Основные этапы решения задач на эвм
- •Анализ постановки задачи и ее предметной области
- •Формальное решение задачи
- •Алгоритмизация
- •Основные средства представления алгоритмов
- •Визуальные алгоритмы
- •Процесс программирования
- •Языки программирования
- •Язык программирования Pascal
- •Среда программирования Delphi
- •Событийная модель ос Windows
- •Концепция объектно-ориентированного программирования
- •Delphi. Основные характеристики продукта
- •Высокопроизводительный компилятор в машинный код
- •Быстрая разработка приложения из прототипов
- •Структурное объектно-ориентированное программирование
- •Создание приложения в Delphi
- •Свойства в Delphi
- •События в Delphi
- •Основные понятия алгоритмического языка Состав языка
- •Основные символы
- •Элементарные конструкции
- •Выражения
- •Комментарии
- •Директивы компилятора
- •Тип данных
- •Приведение типов
- •Простые типы данных Целые типы данных
- •Битовая арифметика
- •Вещественные типы данных
- •Логический тип данных
- •Символьный тип данных
- •Структура программы
- •Константы
- •Переменные
- •Операторы Оператор присваивания
- •Оператор перехода
- •Структурные операторы
- •Операторы управления выполнением цикла
- •Оператор варианта
- •Подпрограммы
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Структурированные типы данных Массивы
- •Строковой тип данных (строки)
- •Множества
- •Файлы. Файловый тип
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Последовательный и прямой доступ к компонентам файла
- •Процедурный тип
- •Вариантный тип
- •Адресный тип. Указатели
- •Динамические переменные
- •Динамические структуры данных
- •Динамические массивы
- •Очереди
- •Статические методы
- •Виртуальные методы
- •Динамические методы
- •Методы обработки сообщений
- •Конструкторы и деструкторы
- •Замещенные методы
- •Абстрактные методы
- •Свойства
- •Обработчики событий
- •Список рекомендуемой литературы
Адресный тип. Указатели
Указатель - это переменная, в которой хранится адрес памяти, указывающий на начало размещения некоторых данных в памяти.
Указатели применяют для определения адреса в памяти конкретного объекта, например какой-либо переменной или подпрограммы.
Указатели бывают типизированными и нетипизированными.
Типизированный указатель — это указатель, который ссылается на данные определенного типа и указан при объявлении указателя или типа указателя.
Для объявления типа указателя используется специальный значок ^, который располагается перед типом адресуемых данных.
Type
<имя_типа>=^<тип_данных>;
Нетипизированный указатель — это указатель, который содержит адрес произвольной области памяти, то есть ссылается на данные любого типа.
Для объявления нетипизированного указателя используется слово pointer.
Для получения адреса переменной или подпрограммы используется операция получения адреса @ или стандартная функция addr(X).
Для указателя применяется специальное значение Nil, которое означает, что указатель не содержит адреса.
Для доступа к переменной, адрес которой находится в указателе, используется операция разыменовывания указателя ^.
Для указателей применимы операции отношения = и <>.
Пример:
Var A:byte;
P:^byte;
...
P:=@A;
P^:=5; // то же, что A:=5;
Динамические переменные
Статической переменной (статически размещенной) называется описанная явным образом в программе переменная, обращение к ней осуществляется по имени. Место в памяти для размещения статических переменных определяется при компиляции программы. Память под такую переменную резервируется при запуске программы и освобождается только при завершении работы программы.
Все глобальные переменные в программе являются статическими переменными. Локальные переменные подпрограмм полустатическими, так как память под них выделяется в аппаратном стеке при вызове подпрограммы, а освобождается при возврате из подпрограммы.
При использовании указателей в программе могут использоваться динамические переменные. Такие переменные не указываются явно в описаниях переменных и к ним нельзя обратиться по имени. Доступ к ним выполняется только с использованием указателей. Такие переменные создаются и память под них выделяется в любом месте программы при необходимости работы с ней. После работы с такой переменной она должна быть удалена, то есть должна быть освобождена память занимаемая переменной.
Для работы с динамическими переменными используются следующие стандартные процедуры:
Процедура New(var p:Pointer) выделяет место в динамической области памяти для размещения динамической переменной p^ и ее адрес присваивает указателю p.
Процедура Dispose(var p:Pointer) освобождает участок памяти, выделенный для размещения динамической переменной процедурой New, и значение указателя p становится неопределенным.
Процедура GetMem(var p:Pointer; size:Integer) выделяет участок памяти и присваивает адрес его начала указателю p, размер участка в байтах задается параметром size.
Процедура FreeMem(var p:Pointer[; size:Integer]) освобождает участок памяти, адрес начала которого определен указателем p, а размер - параметром size. Значение указателя p становится неопределенным.