Указательные типы
Переменная указательного типа содержит значение,
указывающее на переменную обычного типа - адрес этой переменной (табл.
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 избегают подобного манипулирования указателями.
Оглавление
|