Переменная указательного типа содержит значение, указывающее на
переменную обычного типа - адрес этой переменной (табл. 1.8).
pointer // Указатель без типа. ^typel // Указатель с типом.
Если исходный тип (тип переменной, на которую должен ссылаться указатель)
еще не объявлен, его надо объявить в том же разделе объявления типов, что и тип
указателя. Только исходный тип указателей может совпадать с собственно
типом.
Таблица 1.8. Средства работы с указателями
Средство |
Описание |
New |
Распределяет новый участок динамической памяти и записывает его адрес в
переменную указательного типа |
Оператор @ |
Направляет переменную-указатель на область памяти, содержащую любую
существующую переменную, процедуру или функцию, включая переменные, имеющие
идентификаторы |
GetMem |
Создает новую динамическую переменную заданного объема и записывает ее адрес
в переменную указательного типа |
Указатели и адресные функции Информация,
содержащаяся в переменной указательного типа, - это адрес некоторого участка в
машинной памяти. Эти значения задаются во время работы программы и могут
меняться от одного запуска к другому. Следующие функции обеспечивают доступ к
адресной информации в программе и тестирование переменных-указателей.
Функция |
Описание |
Addr |
Возвращает адрес указанного объекта |
Assigned |
Проверяет, равно ли значение процедурной функции Nil |
Ptr |
Преобразует адрес в указатель |
Зарезервированное слово Nil указывает значение указателя, который ни на
что не указывает. Такие указатели называют неопределенными. В Object Pascal
только при определении указателей можно нарушать правило, по которому все
указываемые идентификаторы, в том числе идентификаторы типов, должны быть
объявлены выше. Здесь можно указать идентификатор еще необъявленного типа, как в
следующем примере:
type PointerType = ^NotYetDefinedType;
Однако необъявленный тип необходимо объявить ниже в том же блоке
объявления типов. Определенный в Object Pascal тип Pointer- это
указатель без типа. Обратиться к переменной через такой указатель невозможно (к
переменной типа Pointer нельзя дописывать символ "^"). Однако можно
задать ей другой указательный тип. По значениям переменных тип Pointer
совместим с остальными указательными типами.
Совет: Во многих языках указательные типы как таковые отсутствуют.
Однако в С и C++ они есть и определяются звездочкой перед типом объявляемой
переменной. Указатели в C/C++ трактуются наподобие целых переменных.
программисты Delphi избегают подобного манипулирования указателями.
|