Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по программированию.doc
Скачиваний:
8
Добавлен:
29.04.2019
Размер:
176.13 Кб
Скачать

Вопрос 29. Ссылочный тип данных. Указатели.

Указатели-переменные, кот. содержат адреса др. переменных. Указатель-тип дан-х, кот. сод. адреса области динамической памяти. Пример: переменная p содержит адрес пер-й x=34, пер-я g сод-т адрес пер-й y=0.54. p 34 (над 34 стоит x),(c g аналогично). Типизированные указатели: Содержат адреса, по кот. в памяти распр- еделяются данные определ-х типов(Var имя указ-ля: ^ базовый тип; var p: ^byte; var g:^real;). Нетипизированные указатели: Содержат адреса, не связанные с конкретными типами данных(Var имя указ-ля: pointer; var p,g:pointer;). (В указателях используется любой базовый тип кроме файлового). Пример: Type M= ^ mas;(тип- указ-ль M на тип mas) mas=arrey[1..10]of real;(описание типа mas)var q:M; (переменная- указ-ль на массив). При описание указатели могут ссылаться на еще необъявленный тип данных (исключение). Используя типизированные указатели с данными, размещенными по этим адресам, можно выполнять все операции, предусмотрееные базовым типом.

Var p1:^char; p2:^zap; Type zap=record b1:byte; b2:real; end;

Если указ-ль не содержит указ-ля, то его объявляют NIL (для типиз. и нетипиз).

Операции над указателями: Писваивание, Отношение(проверка на равенства и неравенства), Получение адреса переменной, Операция разыменования.

Вопрос 30. Динамическая память.

Динамич. обл. памяти расположена за обл. памяти, кот. занимает прога.

HeapOrg-указатель на начало области, HeapEnd-на конец, HeapPtr-на текущее значение границы свободной обл.. Процедуры и функции для типизированных указателей: Процедура New (имя типиз. указ.) выделяет требуемый по размеру участок памяти и заносит его адрес в переменную-указатель; Функция New(имя типиз. указ.):pointer выделяет память и заносит…; Dispose(имя типиз. указ.) освобождает занимаемую указ-м память. Пример: Type TP=^real; var p1^:integer; p2:TP; Для выделения памяти: New(p1); или p2:=New(TP). Для нетипизированных указателей: GetMem(var P:pointer;size:word)-создает в динамич. памяти новую динамич. переменную с заданным размером Size и присваивает ей адрес указателя P . Переменная P указатель может указывать на данные любого типа; FreeMem(var P:pointer;size;word)- освобождает обл. памяти, выделенную процедурой GetMem.

Процедуры и функции для работы с динамической памятью: Size of(x):word- вызывает размер в байтах объекта x; MaxaVall:longlnt-вызывает размер в байтах максимального непрерывного свободного участка области памяти; MemaVall: longlnt-вызывает размер в байтах всей свободной части области памяти-сумму длин всех свободных участков. Примеры:

Type zap=record Type Tz=record Type zap1=record

x:byte; y:char; x:^boolean; y:byte; a:pointer; b:byte; c:char; d:^zap2; end;

z:^byte; end; z:^real; and; zap2=record

var p1:^zap; var p:^Tz; x:byte; y:real; z:pointer; end;

Var q:^ zap1;

Вопрос 31. Очередь.

Л инейная динамич. структура данных, для кот. разрешено добавление элемента в конец очереди, а удаление из начала очереди. Для организации очереди необходимо иметь указатель на начало, конец и на текущий элемент очереди

Создание очереди из целых чисел: TypeToch=^TElement;

TElement=record inf:byte; link:Toch; end;

С оздание первого элемента

Исходное состояние

BegP:=nil; EndP:=nil; p^.inf:=7; p^.link:=nil;

Установка указателей

BegP:=P;

EndP:=P;

Д обавление нового элемента

New(P);

p^.inf:=3; p^.link:=nil;

У становка указателей

EndP^.link:=P;

EndP:=P;

Д обавление нового элемента и переустановка указателей

New(P); P^.inf:=5; P^.link:=nil;

EndP^.link:=P; EndP:=P;

Удаление элемента из очереди

BegP:=BegP.link;

Dispose(P);