Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Динамические структуры.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
434.69 Кб
Скачать

Описание и состояния указателей

Работа с указателем начинается с его объявления. Объявлять можно указатели 2-х типов.

Первый тип - стандартный. Для его описания используется слово pointer. Такой указатель может содержать адрес переменной любого типа.

Пример описания: P: pointer;

Второй тип - пользовательский. Для его описания используется символ ^. После этого символа нужно указать тип объекта, адрес которого будет содержать указатель.

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

Var k,i:^integer; //указатели на целые перемен.

F: ^real; //указатель на веществ. перемен.

Ch:^char; // указатель на символьную переменную

Указатель может находиться в одном из трех состояний:

  1. Содержит адрес какой-либо переменной, память под которую уже выделена. Говорят, что указатель ссылается на эту область. Эту ссылку на рисунке обозначают стрелкой:

    P

    P^

    а дрес

  2. Содержит специальный пустой адрес Nil:

P

N il

  1. Находится в неопределенном состоянии, на рисунке это стрелка с вопросом:

P

?

?

Работа с указателями в программе

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

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

Var

a,b:^integer; {объявление указателей}

После объявления указатели находятся в неопределенном состоянии:

a

?

b

?

Выделение памяти

Процедура New(указатель). Она выделяет область памяти, размер которой определяется типом, заданным в объявлении указателя. Адрес этой области записывается в переменную-указатель, указанную в скобках. Для пример выше:

new(a);

new(b);

При этом в памяти сначала выделяется область для хранения значения целого типа (т.к. в функции new параметр a – это указатель на целое число). Адрес этой области помещается в переменную-указатель а. В дальнейшем для обращения к содержимому этой области будет использоваться значение адреса, хранящееся в указателе а. Это обращение будет выглядеть как «a^». На рисунке обозначим так:

a

адрес 1

b

?

a^

Затем происходит выделение памяти под размещение еще одной целочисленной переменной. Ее адрес будет помещен в b. Обозначим по аналогии:

a

адрес 1

b

адрес 2

a^

b^