trains_hr.gif
 


В ПОМОЩЬ СТУДЕНТУ И ШКОЛЬНИКУ

 


Горбачев Л.И. Основы программирования в среде Turbo Pascal.

[НАЗАД]  [ДАЛЕЕ]

УКАЗАТЕЛИ И ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ.

4. Стандартные процедуры и функции для работы с указателями.

   Любым действиям с динамической переменной должна предшествовать процедура ее размещения в оперативной памяти. Эта процедура имеет следующий вид:
New(var P: pointer);

   Она создает новую динамическую переменную, присваивая P значение адреса ее размещения в оперативной памяти. При этом динамической переменной отводится блок памяти, соответствующий размеру типа, с которым объявлен указатель P.

   Если в ходе вычислительного процесса динамическая переменная становится ненужной, ее следует удалять. Это осуществляется с помощью следующей процедуры:
Dispose(var P: pointer);

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

   Кроме названных процедур Турбо Паскаль (а точнее, модуль System) поддерживает следующие стандартные процедуры и функции для работы с указателям и динамическими переменными:

  • GetMem(var P: pointer; Size: word); - создает новую динамическую переменную размером Size байт, устанавливая значение значение указателя P на начало выделенной ей динамической области оперативной памяти. Значение Size не может превышать 65521 байт.
  • FreeMem(var P: pointer; Size: word); - уничтожает динамическую переменную, освобождая Size байт. После выполнения процедуры FreeMem значение P становится неопределенным.
  • Mark(var P: pointer); - запоминает состояние динамической области оперативной памяти в указателе P, для того чтобы в дальнейшем все динамические переменные, размещенные в оперативной памяти после выполнения Mark, могли быть уничтожены с помощью Release.
  • Release(var P: pointer); - уничтожает все динамические переменные, размещенных в оперативной памяти после указателя P. Значение указателя P формируется обычно с помощью процедуры Mark.
  • MaxAvail: longint; - возвращает размер (в байтах) наибольшего непрерывного блока в динамической области оперативной памяти, где может быть размещена (New или GetMem) динамическая переменная.
  • MemAvail: longint; - возвращает размер (в байтах) свободной области в динамической памяти.
Пример: Использование FreeMem, GetMem, MaxAvail и MemAvail.
[program Memory]
    В ряде случаев при работе с указателями полезными являются следующие функции:
  • Addr(X): pointer; - возвращает адрес (указатель) объекта X, где X - любая переменная, имя процедуры или функции.
  • CSeg: word; - возвращает текущее значение регистра CS (адрес сегмента кода, из которого вызвана CSeg).
  • DSeg: word; - возвращает текущее значение регистра DS (адрес сегмента данных).
  • Ofs(X): word; - возвращает значение смещения в адресе аргумента X, где X - любая переменная, имя процедуры или функции.
  • Ptr(Seg, Ofs: word): pointer; - преобразует адрес, заданный в виде базового сегмента (Seg) и смещения (Ofs), в значение типа pointer.
  • Seg(X): word; - возвращает сегментную часть адреса объекта X, где X - любая переменная, имя процедуры или функции.
  • SPtr: word; - возвращает текущее значение регистра SP.
  • SSeg: word; - возвращает текущее значение регистра SS.
Пример: Использование CSeg, DSeg, SSeg, SPtr, Ofs и Seg.
[program Adress]

[НАЗАД]  [ДАЛЕЕ]


Главная
Новости
TurboPascal
Учебное пособие
Лекции
Исходники
Математика
Книги
Лекции
Шпоры
ЦТ и ЕГЭ
Физика

Книги

Шпоры
ЦТ и ЕГЭ

Литература

Сочинения

Краткие содержания

Другое
Мой родной край
Фотогалерея
Форум
Ссылки

Гостевая






 

                                        © Copyright(c) 2004 Amro Group. All rights reserved

 

Hosted by uCoz