Создание структур большого размера

 

Указатели позволяют обойти ограничение на объем памяти структурированных типов (65520 б). Например, ТР не позволяет описать двумерный вещественный массив для обработки матриц 100 на 200. Для хранения такой матрицы требуется почти два сегмента данных.

Организуем структуру для работы с матрицами 100 на 200 и опишем процедуру создания и инициализации матрицы:

 

Type t_row=array[1..200] of real;{тип - строка матрицы}

t_ptr_row=^t_row; {указатель на строку}

t_ptr_matr=array[1..200] of t_ptr_row;{массив указателей на строки}

Procedure Creat_Matr(var a:t_ptr_matr);

var i,j:byte;

Begin

for i:=1 to 200 do

begin

new(a[i]); {создание i-й строки}

for j:=1 to 200 do{цикл ввода элементов i-й строки}

read(a[i]^[j]) {a[i]^[j] - элемент матрицы}

end

End;

 

Длинные строки в ТР

 

Тип stringпозволяет работать со строками переменной длины, не превышающей 255. ТР, начиная с версии 7, дает возможность использовать длинные строки (до 65534 символов). Такие строки, называемые ASCIIZ-строками, представляют собой последовательности символов, заканчивающиеся ноль-символом #0. Хранятся они в символьных массивах с типом индекса 0 .. n. Для реализации операций над ASCIIZ-строками введен тип Pchar=^Char, который можно использовать при включенной директиве расширенного синтаксиса {$X+}. Переменные типа Pchar совместимы по присваиванию с ASCIIZ-строками, над ними можно выполнять следующие операции: cложение указателя с целым числом, вычитание из указателя целого, вычитание указателей, ссылающихся на одну строку, и все 6 операций сравнения при условии, что оба указателя ссылаются на одну строку.

Пусть переменные р1 и р2 типа Pchar указывают на символы одной и той же ASCIIZ-строки, а n - положительное целое.

р2:= р1+ n р2 - указатель на символ, полученный смещением р1 вправо на n символов

р2:= р1- n р2 - указатель на символ, полученный смещением р1 влево на n символов

n:= р1-р2 n - целое число, равное отклонению р2 относительно р1.

Переменные типа Pchar можно индексировать. Так, р1[0]=p1^, р1[3]=(p1+3)^.

Модуль Strings содержит подпрограммы для работы с ASCIIZ-строками.