Главная » Free Pascal » Адресные объекты Free Pascal

0

Как правило, любые объекты программы снабжаются индивидуальным име- нем (идентификатором), которое используется в тех случаях, когда мы собираем- ся извлечь значение объекта или заменить его новым значением. Однако в опер а- тивной памяти компьютера активные в данный момент объекты расположены в ячейках (байтах, словах, двойных или четверных словах), каждая из  которых имеет фиксированный адрес. Многие алгоритмические языки предоставляют программисту возможность узнать во время исполнения программы адрес того или иного активного объекта. Такая информация может оказаться более удобной при выполнении некоторых операций, например, при передаче данных в подпр о- граммы. Так как значение адреса занимает в памяти всего четыре байта, то пер е- дача адреса обходится дешевле, чем пересылка значения, занимающего в памяти гораздо больше места.

К объектам адресного типа относятся указатели на данные различного типа и указатели на точки входа в подпрограммы и функции (по терминологии Паска- ля — данные процедурного типа).

Указатели на данные, в свою очередь, могут принимать в качестве своего зна- чения адрес объекта фиксированного типа (по терминологии Паскаля — типизиро- ванные указатели) или адрес, с которого в оперативной памяти начинает разме- щаться объект любого типа (по терминологии Паскаля — нетипизированные указатели). Для объявления данных типа "указатель" используется одна из сле- дующих конструкций:

имя_указателя: ^тип;      {типизированный указатель}

имя_указателя: pointer;   {нетипизированный указатель}

Типизированному указателю можно присваивать адреса переменных того же типа, а нетипизированному указателю — адреса объектов любого типа. Однако пе- ред извлечением значения, на начальный адрес которого "смотрит" нетипизиро- ванный указатель, его надо обязательно привести к типу соответствующего данно- го. Грубо говоря, типизированный указатель "знает" адрес и длину объекта, на который он "смотрит". Поэтому имеется возможность по текущему адресу опреде- лить, где находится следующий или предыдущий объект того же типа. Для этого достаточно к текущему значению указателя прибавить единицу или вычесть из не- го единицу (значение указателя при этом фактически увеличится или уменьшится на длину соответствующего типа данных). Это напоминает ситуацию с индексами элементов массива: a[j] соответствует значению j-ого  элемента  массива, a[j+1] — значению следующего элемента, хотя адреса соседних элементов масси- ва могут отличаться больше, чем на 1.

Более детальный разбор операций с типизированными и нетипизированными указателями мы отложим до изучения функций и процедур.

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии