Организация динамической памяти в Turbo Pascal
Статическая память
Динамическая память
Указатель
Величина
Значение
Адрес
Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Размер поля однозначно определяется типом. Величина ссылочного типа (указатель) описывается в разделе описания переменных следующим образом:
Var :
Каждый указатель может ссылаться на величину только одного определенного типа, который называется базовым для указателя. Имя базового типа и указывается в описании в следующей форме:
:=^
Например:
Type Massiv=Array[1..100] of integer;
Var P1: ^integer;
P2: ^char;
PM: ^massiv;
Память под динамическую величину, связанную с указателем, выделяется в результате выполнения стандартной про цедуры new. Формат обращения к этой процедуре выглядит так:
NEW ();
Считается, что после выполнения этого оператора создана динамическая величина. Пусть в программе, в которой имеется приведенное выше описание, присутствуют операторы
NEW(P1); NEW(P2); NEW(PM);
После их выполнения в динамической памяти оказывается выделенным место под три величины (две скалярные и один массив), которые имеют идентификаторы
P1 ^, P2 ^, PM ^
Например, обозначение Р1^ можно расшифровать так: дина мическая переменная, на которую ссылается указатель Р1.
Статическая память
Динамическая память
Указатель
Величина
P1
P1^(2 байта)
P1^(2 байта)
P1^(1 байта)
P2
PM^(100 байта)
PM
P1^:-25;
P2^:=“W“;\
For I:=1 to 100 do PM^ [I]:=I;
В качестве ссылочного выражения можно использовать: указатель; ссылочную функцию (т. е. функцию, значением которой является указатель); константу Nil.
DISPOSE();
Type Pe=^Elem;
Elem=Rerord
T: Real;
P: Pe
End;
Создать вещественный массив из 10000 чисел, заполнить его случайными числами в диапазоне от 0 до 10000. Вычислить среднее значение массива. Очистить динамическую память.
Program f1; Const n=10000; Type Mas=array[1..n] of real; Var p: ^mas; I: integer; s: real; Begin S:=0; Randomize; New(p); For i:=1 to n do begin P^[i]:=random; S:=s+p^[i]; end; S:=s/n; Writeln(‘Сумма элементов массива равна’, s:7:4); End.