Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Работа с динамическими переменными
Обратиться к динамической переменной можно с помощью операции разыменования: Это выражение является переменной базового типа указателя. Разыменование нетипизованных указателей не имеет смысла. После размещения динамической переменной в «куче» значение ее не определено и требуется инициализация. С помощью указателей, описанных в примере 1, могут быть созданы и инициализированы динамические переменные, например, следующим образом: New(p1); Read(p1^); {Введем 67} New(p2); p2^:=25; Изобразим схематично результат выполнения этих операторов: p1
p2 После выполнения оператора p2^:=p1^ имеем p1
p2 После присваивания p2:=p1 схема имеет вид p1
p2
Теперь переменные р1 и р2 ссылаются на одну и ту же область памяти, адрес переменной p2^ до присваивания утерян. Этого не должно быть, так как «засоряется» динамическая память. Перед присваиванием нужно было освободить память, обратившись к процедуре, например, dispose(p2). Пример 2. Создание и инициализация структурированной динамической переменной p_vect, описанной в примере 1: New(p_vect); for i:=1 to 100 do read(p_vect^[i]); p_vect^ имеет тип t_vect - массив, p_vect^[i] - элемент массива.
Создание структур большого размера
Указатели позволяют обойти ограничение на объем памяти структурированных типов (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-строками.
|
||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 149; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.38.125 (0.008 с.) |