Замечание1:Порядок частей – именно такой, как показано: фиксированная часть всегда первая (или единственная)


Замечание2: Фиксированная часть может вообще отсутствовать.

Замечание3: Вариантная часть может быть только одна.

Фиксированная частьсостоит из отдельных полей и структура их точно такая же, как у ранее рассмотренных записей. Под каждую переменную, описываемую в фиксированной памяти, выделяется отдельная ячейка памяти.

Вариантная часть начинается со слова case.

Особенности вариантной части:

· Поле селектора может иметь следующие два вида:

1). имя : тип

2). тип

· Каждое вариантное поле предваряется константой, которая отделяется от описания поля двоеточием.

· Каждое описание вариантного поля заключается в круглые скобки.

· В вариантной части каждое поле описывается так же как и в фиксированном.

· По поводу типа селектора и типа константы. Тип селектора выбирается с таким расчетом, что бы число возможных изменений значений этого типа было не меньше, чем число этих вариантных полей.

· В ТР не принято использовать имя селектора вообще. Это в старом Паскале для того, чтобы выбрать нужный вариант, надо было присвоить соответствующее значение переменной-селектору.

· Тип селектора может быть любым порядковым кроме longint.

· Если известно, что число возможных значений не больше 2, то обычно используют boolean для типа селектора.

· По поводу того как вариантная запись располагается в памяти. Особенность этого состоит в том, что все вариантные поля разделяют одну и ту же область памяти. Размер этой области выбирается компилятором по размеру наибольшего вариантного поля. (по типу : 1 байт, 2 б, 4б и т.д.).

· В каждый конкретный момент времени вам доступно только одно поле из вариантной части.

· При переходе от одного вариантного поля к другому, значение вариантной части не меняется, меняется лишь та точка зрения на ту область памяти, которая отведена под вариантную часть.

Var

A : record

Case byte of

0 : (a1 : array [0..3] of byte);

1 : (a2 : array [0..1] of word);

2 : (a3 : longint);

3 : (a4 :string[3]);

end;

младший старший

байт байт

1-й вариант:

a1[0] a1[1] a1[2] a1[3]

2-й вариант:

a2[0] a2[1]

3-й вариант:

  а3  

Здесь изображены три точки зрения на одну память из 4 байтов:

1). Рассмотрим область как массив из 4-х элементов размером 1 байт.

2). Массив из 2-х элементов размером 2-а байта.

3). Одно значение размером в 4-е байта.

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

Примеры:

а.а1[0] : = 1; - в младший байт области памяти записывается значение 1.

а.а1[3] : = 1; - в старший байт области памяти записывается значение 1.

Если бы вместо longint записать string[3], то в этом случае можно было бы с каждым символом строки работать как с целым числом без всяких преобразований типов.

 



Дата добавления: 2016-05-28; просмотров: 1500;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.