Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
29_Ae1.doc
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
302.08 Кб
Скачать

26 Ссылочные типы данных

Описание ссылочных переменных и их семантика

Синтаксис задания ссылочного типа:

 ::= ^

^ - признак ссылочного типа; - имя стандартноголибо описанного ранее типа. Это тип динамических объектов, которые можетпредставлять переменная ссылочного типа. Надо подчеркнуть , что здесь можетбыть только имя типа.

 Сами переменные ссылочноготипа вводятся обычным образом.

type      массив = array [1..100] of integer;      массивссылок= array [1..100]of^integer; var      q,p:^integer;      c:^char;      матрица:^массив;      чудо:массивссылок;

 Значение ссылочной переменной, соответствующее отсутствиюдинамического объекта - nil (зарезервированное слово).

Следует уяснить, что описание вида

 varv:^T;

лишь вводит статическую переменную(под которую отводится память). Однако, никакого объекта типа Т при этом непоявляется. Для порождения объекта служит стандартная процедура new. Этапроцедура имеет один фактический параметр - ссылочную переменную. В результатевыполнения оператора процедуры new порождается динамический объект надлежащеготипа, а ссылочной переменной-параметру присваивается ссылка на этот только чтопорожденный объект.

 При этом созданному динамическому объекту никакого значения неприсваивается. Поэтому конструкция new(v) равносильна описанию статическойпеременной типа Т.

 Для работы с динамическими объектами используется переменная суказателем:

::=^

здесь ссылочная переменная - это тассылочная переменная, которая представляет в программе соответствующийдинамический объект. Стрелка после имени ссылочной переменной свидетельствует отом, что речь идет о значении динамического объекта, который эта переменнаяпредставляет, а не о самой переменной.

 Например:

r^:=35; p^:=r^+p^div3;матрица^[p^+3]:=25; чудо[p^+3]^:=3

 В примере матрица^[p^+3]:=25; происходит разименование ссылочнойпеременной матрица (выражение вида матрица^ часто называют разименованием, аоперацию ^ - операцией разименования; эта операция есть во многих языкахпрограммирования). В случае чудо[p^+3]^:=3 происходит разименования не полнойссылочной переменной чудо, а лишь частичной переменной чудо[p^+3]. Операция разименованиеприменима только к простым переменным ссылочного типа.

27 Оператор new

Указатели

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

type

a = ^b;

b = record

x: Integer;

y: Char;

z: a;

end;

var

pointer_to_b: a;

Здесь переменная pointer_to_b — указатель на тип данных b, запись. Указатели могут быть использованы перед объявлением. Это исключение к правилу, которое гласит, что любая вещь должная быть объявлена перед тем, как используется. Введение этого исключения позволило организовывать рекуррентные определения структур данных, в том числе такие, как линейные списки, стеки и очереди, включая указатель на запись в описании этой записи (см. также NULL).

Чтобы создать новую запись и присвоить значение 10 и символ A полям a и b в ней, необходимы следующие операторы:

new(pointer_to_b); { выделение памяти указателю }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]