Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_лекция-18-Т4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
80.9 Кб
Скачать

4.12.3. Нетипизированные указатели.

Эти указатели не связанные с каким либо конкретным типом данных. Они объявляются с помощью стандартного типа Pointer, например так

PA, PS : Pointer;

С помощью нетипизированных указателей удобно динамически размещать данные , структура и тип которых меняются в ходе выполнения программы.

Память для значения данного соответствующего У1^ и для указателя отводится в процессе выполнения программы, причем программист может по своему усмотрению указать, когда надо выделить память для тех или иных динамических переменных и когда можно освободить эту динамическую память. Для этих целей есть две стандартные процедуры.

Процедура NEW (указатель) - выделяет динамическую память, то есть присваивает указателю адрес ячейки памяти, в которую можно помещать данные.

Процедура DISPOSE (указатель) - возвращает динамическую память в кучу. При выполнении этой процедуры только освобождается динамическая память, а сам указатель не изменяется. Для исключения возможных ошибок целесообразно после применения процедуры DISPOSE присвоить указателю нулевое значение, которое в ТР задается константой NIL.

Пример использования указателей.

Program ykaz;

Var

Za , Zb : ^ real;

k,f,g : Real;

Begin {главная программа}

New (Za) ; New (zb) ;

Za ^ : = 10.5 ; Zb ^ : = 15.2 ;

f : = Zb ^ + Za ^ ; { f = 25.7 }

Zb : =Za;

k : = Zb ^ + Za ^ ; { k = 21 !! }

. . . . . . . . . .

4.12.4. Объявление указателей.

Как объявить указатели простых типов было показано выше. Для сложных типов указатели можно объявлять по разному. Обычно используют известный способ - в разделе типов объявляют идентификатор типа, который используют в разделе переменных.

Пример. Type Sm = Array[1..100] Of Integer;

Var Myk : ^ Sm ;

(можно и так Var PT : Array [1..20] Of ^Real; ).

4.12.5. Операции с указателями.

К динамическим переменным можно применять все операции, которые определены для обычных переменных соответствующих типов.

К самим указателям можно применять:

  • операцию присваивания. В этом случае указатель получает значение адреса. Правило: указатели связанные операцией присваивания должны быть одного типа.

  • операции сравнения = и <> .

Замечание - обращение к элементам массива Ms[k,n]^ , то есть символ ^ записывается после квадратных скобок.

Создание массива указателей For j : = 1 To N Do

New( Mp[j] );.

Параметром процедуры New() может быть только типизированный указатель. Для работы с нетипизированными указателями предназначены процедуры:

  • GetMem(Z, Size) – для резервирования памяти;

  • FreeMem(Z, Size) - для освобождения памяти.

Здесь Z – нетипизированный указатель; Size – размер (в байтах) резервируемой или освобождаемой динамической памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]