Операции над указателями

Над значениями указателей возможны следующие операции.

Присваивание. При выполнении этой операции указателю присваивает­ся значение другого указателя или nil. Допускается присваивать указателю только значение того же или неопределенного типа.

Например:

Операции над указателями - student2.ru

Получение адреса. Это унарная операция, которая строится из знака операции - символа @ (коммерческое а) и одного операнда - переменной любого типа. Результат операции - указатель типа pointer, который можно присвоить любому указателю.

Например:

Операции над указателями - student2.ru

Доступ к данным по указателю (операция разыменования). Чтобы по­лучить доступ к переменной по указателю, необходимо после переменной -типизированного указателя поставить знак «^». Полученное значение имеет тип, совпадающий с базовым типом указателя.

Нетипизированные указатели разыменовывать нельзя.

Например:

Операции над указателями - student2.ru

В табл. 7.1 показано, как выполняются операции с указателями.

 
  Операции над указателями - student2.ru

Операции над указателями - student2.ru

Операции отношения. Из всех возможных операций отношения допус­каются только операции проверки равенства (=) и неравенства (< >). Эти операции проверяют соответственно равенство и неравенство адресов.

На­пример:

Операции над указателями - student2.ru

или

Операции над указателями - student2.ru

Поскольку в качестве базового типа типизированного указателя может быть использован любой тип, допустимо определять «указатель на указа­тель». Например, если переменную ррi описать и инициализировать следую­щим образом:

Операции над указателями - student2.ru Операции над указателями - student2.ru

то будет реализована схема, изображенная на рис. 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 Динамические структуры данных

План

Наши рекомендации