Тип данных Описатель';'

где Тип данных указывает тип поля структуры для объектов, определяемых в Описателях. В простейшей форме описатели представляют собой идентификаторы переменных или массивы.

Пример объявления структур:

Переменные tochka1, tochka2 объявляются как структуры, каждая из которых состоит из трех полей: tzvet, x и у. Переменная simv объявляется как двумерный массив, состоящий из 63 элементов, описывающих рисунок символа. Во втором объявлении каждая из двух переменных — date1, date2 — состоит из трех полей: year, moth, day.

Существует и другой способ объявления переменной структурного типа.

Этот способ основан на использовании заранее объявленного типа структуры. Объявление структурного типа аналогично объявлению перечислимого типа. Структурный тип объявляется следующим образом:

"struct" Тип '{' Список описаний '}';

где Тип — это идентификатор.

В приведенном ниже примере идентификатор student объявляется как тип структуры, список описаний полей которой приводится далее в фигурных скобках:

struct student

{char name[25];    //Имя и фамилия студента

int id;                  //Номер в журнале

int age;                //Возраст

char usp;              //успеваемость

};

Тип структуры используется для последующего объявления структур данного вида в форме:

struct Тип Список идентификаторов';'

Пример:

struct student st[23];

Поле структуры может быть указателем на структуру того же самого типа, в которой оно объявлено. Ниже рассматривается пример такой ссылки.

struct node { int data; struct node * next; } st1_node;

Доступ к отдельным полям структуры осуществляется с помощью указания имени структуры и следующего через точку имени поля, например:

st2.id=5;                     //Присвоить значение полю id структуры st2

st1.name="Иванов";     //Присвоить значение полю name структуры st1

st1_node.data=1985;    //Присвоить значение полю data структуры st1

st[1].name="Иванов";   //Занести студента Иванова в журнал

st[1].id=2;                   //поместить его в журнал под вторым номером

st[1].age=23;               //Занести в журнал его возраст

Битовые поля

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

"struct"  '{' «unsigned» Идентификатор1 ':' Длина поля1'

"unsigned" Идентификатор2 ':' Длина поля2'  '}' 

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

Пример:

struct { unsigned a1 : 1;

           unsigned a2 : 2;

           unsigned a3 : 5;

           unsigned a4 : 2; } prim; 

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

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

Cntr.Cmd=30;

Объединения (смеси)

Иногда один и тот же элемент данных удобно обрабатывать по-разному, в зависимости от ситуации. Например, кодовое слово помехоустойчивого кода можно передавать целиком и можно осуществлять запись информационных и проверочных битов различными процедурами. Еще один пример. Четыре соседних байта можно интерпретировать в один момент времени (для обработки) как число с плавающей запятой, и эти же четыре байта в другой момент времени интерпретировать (для передачи или приема) как четырехэлементный массив байтов.

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

Тип объединения объявляется в следующем виде:

Перейти на страницу:

Поиск

Похожие книги