Общие представления о динамической памяти. Программирование. 11 класс

Содержание

Слайд 2

Для чего программе память?

Для хранения:
самой программы;
определяемых пользователем констант и структур данных;
точек возврата

Для чего программе память? Для хранения: самой программы; определяемых пользователем констант и
из процедур и функций;
временного хранения промежуточных результатов вычислений, а также исходных данных и результатов работы при выполнении операций ввода и вывода.

Слайд 3

Какая бывает память программы?

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

Какая бывает память программы? Статическая для хранения значений переменных, объявленных в блоке
ограничен 64 КБ
Динамическая
оперативная память, выделяемая программе за вычетом сегмента данных (64 Кб), стека (16 Кб) и собственно тела программы.
Размером можно управлять.

Слайд 4

Какие бывают переменные?

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

Какие бывают переменные? Статические объявлены в блоке описания программы. Память для хранения
ДО запуска программы и не изменяется в процессе её работы.
Компилятор может их обрабатывать без запуска программы.
Динамические
переменные, память для хранения значений которых выделяется и освобождается в процессе работы программы.

Слайд 5

Какие бывают переменные?

Особый вид переменных – указатель (ссылка).
Указатель – переменная, в качестве

Какие бывают переменные? Особый вид переменных – указатель (ссылка). Указатель – переменная,
значения хранящая АДРЕС первого байта памяти, где размещены данные.
Адрес занимает 4 байта и хранится в виде 2-х слов (каждое слово = 2 байта или 16 бит), первое из которых определяет сегмент, второе – смещение.
При этом сами данные могут занимать в памяти КИЛОбайты.

Слайд 6

Виды указателей

Типизированные
содержат адрес, по которому записана переменная заранее известного типа
Нетипизированные
указатели,

Виды указателей Типизированные содержат адрес, по которому записана переменная заранее известного типа
не связанные с каким-либо типом данных

Слайд 7

Объявление в программе

Типизированные указатели
type Pint= ^integer; var A : Pint;
var A : ^integer;
Нетипизированные

Объявление в программе Типизированные указатели type Pint= ^integer; var A : Pint;
указатели;
type Pptr= pointer; var A : Pptr;
var A : pointer;

Слайд 8

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

Разрешены:
присваивание
проверка на равенство или неравенство
2 указателя равны только тогда, когда

Операции с указателями Разрешены: присваивание проверка на равенство или неравенство 2 указателя
ссылаются на одну и ту же переменную
Запрещены:
арифметические операции
сравнение больше-меньше

Слайд 9

Правила работы с указателями

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

Правила работы с указателями Связать указатель с памятью, хранящей значение существующей переменной
при помощи функции «@» var P:^integer; A: integer; begin A:=5; P:=@A;
Изменить значение переменной через указатель можно приписывая ему окончание «^» P^:=P^+2;
Любые действия над указателем в программе располагаются между процедурами New (или функцией @) и Dispose.

Слайд 10

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

Выделение памяти под динамическую переменную (процедура NEW).
Инициализация указателя.
Освобождение памяти после

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

Слайд 11

Присваивание значений указателю

Процедура New отводит блок памяти в области динамических переменных и

Присваивание значений указателю Процедура New отводит блок памяти в области динамических переменных
сохраняет адрес этой области в указателе.
Специальная операция @ ориентирует переменную-указатель на область памяти, содержащую значение существующей переменной программы.
Существует единственная константа ссылочного типа NIL, которая обозначает «пустой» адрес. Её можно присваивать любому указателю.
Переменной-указателю можно присвоить значение другого указателя того же типа. Используя тип pointer как промежуточный, можно присвоить значение одного указателя другому при несовпадении их типов.
Пример Var p1, p2: ^integer; р3: ^real; рр: pointer;
{! неверно} р1:= р3;
{! корректно} pp:= р3; р1:= рр; {а также} р1:= р2;

Слайд 12

Пример №1

Условие задачи
Целое число, заданное с клавиатуры сохранить в переменной, адрес которой

Пример №1 Условие задачи Целое число, заданное с клавиатуры сохранить в переменной,
связать с указателем. Увеличить значение переменной в три раза, пользуясь указателем, и вывести на экран.
Особенность решения
Указатель будет связан с ячейкой статической памяти,
поэтому НЕ ТРЕБУЕТСЯ выделять для него динамическую память.

Программа решения
Program DemoPointer1;
Var p:^integer;
a: integer;
BEGIN
write(‘Задайте число ->‘);
readln (A);
p := @A;
p^:= 3*p^;
writeln(‘Число А=', A);
readln
END.