Форум программистов, компьютерный форум, киберфорум
Наши страницы
dserp18
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Указатели Pascal

Запись от dserp18 размещена 11.09.2018 в 08:45

Borland Pascal. Руководство пользователя

Обычно вы определяете ссылочные типы, которые указывают на конкретный вид элемента, например, целое значение или запись данных. Как вы далее увидите, можно извлечь преимущество из того факта, что указателю известно, на что он указывает. Чтобы определить типизированный указатель, вы можете описать новый тип, определенный символом каре (^), за которым следуют один или более идентификаторов. Например, чтобы определить указатель на Integer, вы можете сделать следующее:
Pascal
1
type PIneger = ^Integer;
Теперь вы можете описать переменные типа PInteger. Если вы не собираетесь часто использовать ссылочный тип, то можете просто описать переменные, как указатели на уже определенный тип. Например, если вы определили PInteger как ^Integer, то следующие описания переменной эквивалентны:
Pascal
1
var X: ^Integer: Y: PInteger;
Использование New как процедуры
New - это очень простая процедура. После описания переменной-указателя вы можете вызвать процедуру New
для выделения пространства в динамически распределяемой памяти для указываемого переменной элемента.
Приведем пример:
Pascal
1
2
3
4
5
6
var IntPointer: ^Integer; 
StringPointer: ^String; 
begin New(IntPointer); { выделяет в динамически распределяемой области два байта }
New(StringPointer); { выделяет в динамически распределяемой области 256 байт }
. . 
end.
После вызова процедуры New переменная-указатель указывает на память, выделенную в динамически распределяемой памяти. В данном примере IntPointer указывает на двухбайтовую область, выделенную процедурой New,
а IntPointer^ - это допустимая целочисленная переменная (хотя это целочисленное значение еще не определено).
Аналогично, StringPointer указывает на выделенный для строки 256-байтовый блок, а его разыменование дает доступную для использования строковую переменную.

Память, распределенная для переменных с помощью New, после завершения работы с ними должна освобождаться. Это позволит использовать динамически распределяемую память для других переменных. Чтобы освободить память, выделенную для динамической переменной, вы должны использовать процедуру Dispose. В Примере 8.2 вы можете добавить следующее:
Pascal
1
2
Dispose(StringPointer);
Dispose(IntPointer);
Нужно помнить, что если вы распределяете динамические переменные с помощью New, то освобождать выделенную для них память после завершения работы с этими переменными нужно с помощью Dispose.
Размещено в Без категории
Просмотров 139 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для Puporev
    Цитата:
    В Примере 8.2
    Может проще было дать ссылку откуда содрали чем копировать не отредактированный обрывок текста?
    Запись от Puporev размещена 11.09.2018 в 09:07 Puporev на форуме
  2. Старый комментарий
    Аватар для vlisp
    Сегодня какой год? Зачем заниматься некрофилией? К тому же такие куцые примеры не обязывают понимать суть предмета.
    Это даже не запускается на современных ОС, а минимальные 8гб памяти позволяют решить большинство задач не используя кучу. Так сложно перейти на современный паскаль? создать программу и читать адекватный современным требованиям предмет. Это же явная демонстрация отсталости.
    Запись от vlisp размещена 23.09.2018 в 13:22 vlisp на форуме
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru