Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPO / LAB1_PAS / Lab1_SPO_PAS.doc
Скачиваний:
25
Добавлен:
26.03.2015
Размер:
183.3 Кб
Скачать

4.3. Задание значения указателю.

Указателю можно присвоить содержимое другого указателя совместимого типа, константу NIL (пустой указатель) или адрес объекта, определенный с помощью оператора @, а также функций ADDR и PTR.

4.4. Операция разыменования.

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

Обозначается операция разыменования как

<идентификатор_указателя>^;

Она позволяет осуществлять доступ к той области памяти, с которой связан указатель.

4.5. Освобождение динамической памяти.

4.5.1. Освобождение динамической памяти с использованием типизированных указателей определена процедура

Dispose(<идентификатор_указателя>);

Var

P: ^integer;

Begin

New(P);

Dispose(P);

end.

После выполнения процедуры Dispose значение типизированного указателя неопределенно, поэтому теряется связь со значением, на которое он указывал.

4.5.2. Освобождение динамической памяти с использованием указателей любого вида определена процедура

FreeMem(<идентификат_указателя>,<размер_освобождаемой_памяти>)

идентификат_указателя – типизированный или нетипизированный указатель

размер_освобождаемой_памяти – величина типа Word, которая определяет количество освобождаемой динамической памяти

Var

P: Pointer;

Begin

GetMem(P,67);

FreeMem(P,67);

end.

4.5.3. Освобождение фрагментов динамической памяти.

Для освобождения целого фрагмента динамической памяти (занятого несколькими данными) перед началом выделения памяти, т. е. до применения процедур New или GetMem, в переменной-указателе запоминается текущее значение указателя HeapPtr с помощью процедуры

Mark(<идентификатор_указателя>)

Для освобождения фрагмента кучи, начиная от того адреса, который запомнила процедура Mark, и до конца динамической памяти определена процедура

Release(<идентификатор_указателя>),

Var

P: Pointer;

P1, P2: ^integer;

begin

Mark(P);

GetMem(P1, …);

New(P2);

Release(P);

end.

Вызов Release уничтожает список свободных фрагментов в куче, которые могли быть созданы до этого процедурами Dispose или FreeMem, поэтому не следует использовать одновременно механизм освобождения памяти с помощью процедур FreeMem, Dispose и Release.

5. Динамическая структура – список

К динамическим структурам относятся линейные связанные структуры, которые представляют собой последовательности, в которых должно соблюдаться условие: каждый элемент имеет не более одного предшествующего и одного последующего элемента. Порядок элементов в таких структурах задается не индексами элементов (как в массиве), а указателями, входящими в состав элементов структуры.

5.1. Линейные списки.

Линейный список представляет собой дискретную, связанную, динамическую, рекурсивную информационную структуру.

5.1.1. Особенности линейных списков.

  • Списки состоят из элементов одного и того же типа.

  • Связь между элементами и доступ к элементам списка осуществляется при помощи указателей, поэтому, кроме информационных данных, каждый элемент списка должен иметь указатели на последующий или/и предшествующий элемент списка.

  • Количество элементов списка заранее не задаётся, оно может изменяться в процессе выполнения программы.

  • Размер одного элемента списка не может превышать 64 Кбайт.

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

  • Доступ к элементам списка последовательный.

Списки могут быть линейными (односвязными и двусвязными) и циклическими (односвязными или двусвязными).

Соседние файлы в папке LAB1_PAS