Операции над указателями
Над значениями указателей возможны следующие операции.
Присваивание. При выполнении этой операции указателю присваивается значение другого указателя или nil. Допускается присваивать указателю только значение того же или неопределенного типа.
Например:
Получение адреса. Это унарная операция, которая строится из знака операции - символа @ (коммерческое а) и одного операнда - переменной любого типа. Результат операции - указатель типа pointer, который можно присвоить любому указателю.
Например:
Доступ к данным по указателю (операция разыменования). Чтобы получить доступ к переменной по указателю, необходимо после переменной -типизированного указателя поставить знак «^». Полученное значение имеет тип, совпадающий с базовым типом указателя.
Нетипизированные указатели разыменовывать нельзя.
Например:
В табл. 7.1 показано, как выполняются операции с указателями.
Операции отношения. Из всех возможных операций отношения допускаются только операции проверки равенства (=) и неравенства (< >). Эти операции проверяют соответственно равенство и неравенство адресов.
Например:
или
Поскольку в качестве базового типа типизированного указателя может быть использован любой тип, допустимо определять «указатель на указатель». Например, если переменную ррi описать и инициализировать следующим образом:
то будет реализована схема, изображенная на рис. 7.5.
Для получения значения переменной i необходимо дважды применить операцию разыменования. В нашем случае ppi^^ имеет тип integer и равно 1.
Процедуры и функции, работающие с указателями.
Для работы с указателями в Паскале предусмотрены стандартные функции, облегчающие и упрощающие выполнение часто встречающихся операций.
1. Функция ADDR(x): pointer - возвращает адрес объекта х, в качестве которого может быть указано имя переменной, функции, процедуры. Выполняет те же действия, что и операция «@».
2. Функция SEG(x): word - возвращает сегментный адрес указанного объекта.
3. Функция OFS(x): word - возвращает смещение указанного объекта.
4. Функция CSEG: word - возвращает текущее значение сегментного регистра CS - сегментный адрес сегмента кодов.
5. Функция DSEG: word - возвращает текущее значение сегментного регистра DS - сегментный адрес сегмента данных.
6. Функция PTR(seg,ofs:word):pointer - возвращает значение указателя по заданным сегментному адресу seg и смещению ofs.
Лекция №10 Динамические структуры данных
План