Шаг 15.
Описание переменных

    На этом шаге мы рассмотрим правила описания переменных.

    Подраздел описания переменных начинается с ключевого слова 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. Результат работы приложения

    На следующем шаге мы рассмотрим описание процедур и функций.




Предыдущий шаг Содержание Следующий шаг