Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 124

B := Byte( Ptr($40, $40)^); {B — значения байта $40:$40 }

W := Word( Ptr($40,$40)^ ); { W — значение слова $40:$40 }

X := VideoArray( Ptr($B800,0)^); { X — статический массив типа VideoArray содержит теперь в себе образ видеопамяти (текстовое изображение) }

и т.д.

Не стоит только приводить к типу String и производным от него: никогда не известно, что окажется в нулевом элементе строки, где должен храниться ее реальный размер.

10.5.3. Определение размеров типов и переменных

Функция SizeOf(X): Word возвращает объем в байтах, занимаемый X. Причем X может быть не только переменной, но также и идентификатором типа (рис. 10.3).

| TYPE

|  XType = Array[1..10, 1..10] of byte;

|CONST

|  L : Longint = 123456;

| VAR

|  X : String;

| BEGIN

|  WriteLn(SizeOf(Xtype): 10,  SizeOf(L): 10, SizeOf(X))

| END.

Рис. 10.3

Значение SizeOf(строка) всегда дает максимальное значение длины строки. Реальное значение дает функция Length.

Вообще говоря, функцию  SizeOf можно рассматривать как макроподстановку размеров типов и переменных, вычисляемых на этапе компиляции.

Применительно к данным типа «объект» (OBJECT) эта функцию должна использоваться более осторожно, так как у объектов может не быть заранее предопределяемого размера. Обсуждение этого можно найти в гл. 13.

Глава 11. Ссылки, динамические переменные и структуры

Динамическими структурами данных считаются такие, размер которых в процессе работы программы заранее не известен или изменяется и(или) для которых место в памяти ПЭВМ отводится во время выполнения программы. Необходимость в динамических структурах данных обычно возникает в следующих случаях:

1. Используются переменные, имеющие довольно большой размер, необходимые в одни частях программы и совершенно не нужные в других, т.е. переменные, освобождающие память после их использования.

2. В процессе работы программы нужен массив или иная структура, размер которой изменяется в широких пределах и труднопредсказуем.

Кроме этих двух случаев, общих для различных версий Паскаля, при программировании на Турбо Паскале есть еще один. А именно: когда размер переменной (массива или записи) превышает 64 К.

Во всех этих случаях возникающие проблемы можно решить, применяя динамические переменные и ссылочные типы данных.

11.1. Ссылочные переменные


Основным механизмом для организации динамических данных является выделение в специальной области памяти, называемой «кучей», непрерывного участка (блока) подходящего размера и сохранения адреса начала этого участка в специальной переменной. Такие переменные называют ссылочными переменными или просто ссылками (reference). Часто используется синоним этого термина — «указатель» (pointer), но в Турбо Паскале это название имеет особый смысл.