- •Алфавит языка, имена, числа, строки.
- •Структура программы.
- •3. Тип Integer.
- •4. Тип Real.
- •5. Тип Boolean и Char.
- •6. Описательная часть программного блока.
- •7. Процедуры ввода/вывода
- •8. Оператор присваивания.
- •9. Условный оператор
- •X, y, max: integer;
- •10. Оператор цикла с перечислением
- •11. Циклы с предусловием
- •12. Циклы с постусловием
- •13. Оператор варианта.
- •14. Классификация типов данных.
- •15. Перечислимые типы данных
- •16. Ограниченые типы данных.
- •17. Регулярные типы данных.
- •18. Многомерные массивы.
- •19. Комбинированные типы данных
- •20. Оператор with.
- •21 Записи с вариантами
- •22 Множественные типы данных.
- •23 Операции над данными множесвенного типа
- •24 Файловые типы данных
- •25 Текстовые файлы
- •26 Ссылочные типы данных
- •27 Оператор new
- •28 29 Процедуры и функции
- •30. Параметры процедур и функций.
- •31. Локальные и глобальные объекты в процедуах и функциях
- •32. Рекурсии в процедурах и функциях.
- •33. Структурное представление основных конструкций языка.
- •38. Данные с фиксированной точкой
- •1111111101000111(2)- Инвертируем биты - 0000000010111000(2)
- •39. Внутреннее представление чисел с плавающей точкой.
- •40. Внутреннее представление символьных и строковых данных.
- •41. Реализация алгоритма сортировки с применением метода "часового".
- •42. Сортировка методом "пузырька".
- •43. Сортировка выбором min элемента.
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); { выделение памяти указателю }
