<<
>>

Указательные типы

Переменная указательного типа представляет собой адрес, по которому располо­жено значение переменной. Переменные указательного типа всегда занимают в памяти фиксированный объем — 4 байта (при этом они могут ссылаться на объе­мы данных любого размера, вплоть до 232).

Указатель может ссылаться на данные конкретного типа (типизированный указа­тель) или просто на область памяти (нетипизированный указатель). Для объявле­ния нетипизированного указателя используется ключевое слово pointer. Для объяв­ления типизированного указателя используется имя соответствующего типа, перед которым ставится знак разыменования (Л): var

PI : pointer: // нетипизированный указатель

Р2 : Агеа1; // указатель на переменную типа real

РЗ : АМуТуре; // указатель на переменную типа МуТуре.

// определенного пользователем

Работа с переменными указательного типа имеет ряд особенностей. Необходимо помнить, что переменная-указатель является адресом. Чтобы обратиться к значе­нию, на которое данный указатель ссылается, необходимо использовать перед име­нем переменной знак разыменования (Л).

Например, чтобы работать с переменной Р1 как с переменной вещественного типа, используется обращение ЛР1. Обраще­ние к указателю без знака разыменования будет являться обращением не к значе­нию переменной, а к ее адресу!

ПРИМЕЧАНИЕ-----------------------------------------------------------------------------

Переменные указательного типа часто называются динамическими переменными.'

При работе с динамическими переменными им можно присваивать значение nit. Слово nit является зарезервированным и присвоение данного значения указателю означает, что он ни на что не ссылается.

Объявление переменной указательного типа не означает, что при запуске програм­мы для нее будет выделен необходимый объем памяти.

Поэтому перед обращени­ем к динамической переменной необходимо выделить для нее память, а по оконча­нии работы с указателем эту память освободить. Для этого используются специ­альные процедуры языка Object Pascal, перечисленные ниже.

procedure New(var Р: Pointer);

Выделяет необходимый объем памяти для хранения значения переменной, на которую ссылается указатель Р. Объем выделяемой памяти определятся типом указателя. Если недостаточно свободной памяти, генерируется исключитель­ная ситуация EOutOfMemory.

procedure Dispose(var P:Pointer):

Освобождает область памяти, на которую ссылается указатель Р. procedure GetMem(var Р: Pointer; Size: Integer):

Выделяет Size байт для размещения данных, на которые ссылается указа­тель Р. Если памяти недостаточно, генерируется исключительная ситуация EOutOfMemory.

procedure FreeMem(var Р: Pointer [; Size: Integer]);

Освобождает область памяти, на которую ссылался указатель Р. Необя­зательный параметр Size определяет, сколько байтов памяти будет осво­бождено. Если параметр Size указывается, то его значение должно точно со­ответствовать объему памяти, выделенному переменной Р процедурой GetMem.

procedure FreeAndNiKvar Р);

Освобождает память, на которую ссылается указатель Р, и присваивает указа­телю Р значение nil.

Для типизированных указателей выделение и освобождение памяти следует про­изводить с помощью процедур New и Dispose.

ПРИМЕЧАНИЕ------------------------------------------------------------------------------

После освобождения памяти с помощью процедур Dispose и FreeMem значение ука­зателя не будет равно nil. Если необходимо проверять, ссылается на что-нибудь ука­затель или нет, то после освобождения памяти ему следует явно присвоить значение nil или использовать процедуру FreeAndNil, которая, однако, работает только в том случае, если память выделялась процедурой GetMem.

<< | >>
Источник: Избачков Ю. С., Петров В. Н.. Информационные системы. 2006

Еще по теме Указательные типы:

  1. смешанные типы
  2. Раздел II. Отдельные типы (виды) договоров
  3. Типы Характеров Человека
  4. 2.3. Типы и методы выборки
  5. ТИПЫ СОЦИАЛЬНЫХ ОТНОШЕНИЙ
  6. Типы энергетических блоков
  7. Типы дат
  8. 3.1.6. Смешанные типы
  9. Смешанные типы
  10. Смешанные типы
  11. 1 3.5.6. Смешанные типы
  12. Смешанные типы .
  13. 3.7.6. Смешанные типы
  14. Смешанные типы
  15. Смешанные типы