На этом шаге мы рассмотрим правила описания переменных.
Подраздел описания переменных начинается с ключевого слова var, за которым следует список описаний переменных. Структура одного элемента описания для переменных практически всех типов имеет такой вид:
var
<СписокИдентификаторов> : <Тип>;
Исключение составляют так называемые абсолютные переменные, структура описания которых может иметь одну из двух следующих разновидностей:
<СписокИдентификаторов> : <Тип> absolute <Адрес>; или <СписокИдентификаторов> : <Тип> absolute <ИдентификаторПеременной>;
В качестве типа можно использовать или идентификатор типа, который был ранее определен в разделе описания типов, или самостоятельное новое определение типа согласно синтаксису описания типов.
type Colors = ( Red, Blue, Green ); Vector = array [1..100] of integer; var a, b, с : Real ; i, j : Integer; Flag : Boolean; Color : Colors; Digit : 0..9 ; Season : (Spring, Summer, Autumn, Winter); Vectl, Vect2 : Vector; Matrix : array[1..5, 1..10] of Byte;
С помощью директивы absolute можно описать так называемые абсолютные переменные, которые будут располагаться в памяти по строго указанному адресу. Каждая абсолютная переменная должна быть описана отдельно, то есть список идентификаторов в объявлении перед двоеточием должен состоять только из одного идентификатора.
Существует две формы описания абсолютных переменных:
При первой форме указываются точные значения сегмента и смещения (то есть полный адрес), где должна быть размещена описываемая переменная.
CrtMode : Byte absolute $0040:$0049;
Первая константа определяет значение сегмента, а вторая - значение смещения внутри этого сегмента. Обе константы не должны выходить за пределы диапазона от $0000 до $FFFF (от 0 до 65535).
Вторая форма с директивой absolute используется для описания переменной, которая помещается "поверх" другой переменной, то есть по тому же самому адресу.
В объявлениях нижеприведенной программы указывается, что и переменная Digits должна размещаться по тому же адресу, что и переменная ChDigits. В результате, наложение массива типа Byte на строку символов присваивает элементам числового массива значения кодов символов, из которых состоит строка.
unit Un15_1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); const ChDigits : String[10] = '0123456789'; var Digits : array [0..10] of Byte absolute ChDigits; i : integer; S, St : String; begin St:=' '; for i:=1 to 10 do begin Str(Digits[i]:4,S) ; St:= St + S; end; Edit1.Text:= St; end; end.
Текст этого примера можно взять здесь.
Результат работы приложения изображен на рисунке 1:
Рис.1. Результат работы приложения
На следующем шаге мы рассмотрим описание процедур и функций.