Определение структурных переменных
Структура объединяет логически связанные данные разных типов. Структурный тип данных определяется следующим описанием:
struct имя_структуры { Описание_элементов };
Пример:
struct dinner { char *plase; float cost; struct dinner *next; };
Структурная переменная описывается с помощью переменной структурного типа.
Примеры:
struct dinner week_days [7]; /* массив структур */ struct dinner best_one; /* одна структурная переменная */ struct dinner *p; /* указатель на структурную переменную */
Структура, запись в терминологии языка Паскаль и Ада, - это составной объект, в который входят компоненты любых типов, за исключением функций. В отличие от массива, который является однородным объектом, структура может быть неоднородной. Тип структуры указывается записью вида
struct{ список описаний }
В структуре должен быть указан хотя бы один компонент. Указатель типа структуры используется для определения структур. Определения структур имеют следующий вид:
тип-данных описатели;
где тип-данных указывает тип структуры для объектов, определяемых в описателях. В своей простейшей форме описатели представляют собой обычные имена переменных, массивов, указателей и функций. Например, с помощью определения
struct { double x,y; } a,b,c[9];
переменные a и b определяются как структуры, каждая из которых состоит из двух компонентов - x и y. Переменная с определяется как массив из девяти таких структур.
Из определения
struct { int year; short int month, day; } date1,date2;
следует, что каждая из двух переменных date1, date2 состоит из трех компонентов: year, month, day.
С типом структуры может быть ассоциировано имя, которое задается описанием типа в форме
typedef struct { список описаний } имя-типа-структуры;
Спецификатор typedef (определяет класс памяти) позволяет нам создать свое собственное имя типа. Это напоминает директиву #define, но со следующими тремя изменениями:
- В отличие от #define спецификатор typedef дает символические имена, но ограничивается только типами данных.
- Спецификатор typedef выполняется компилятором, а не препроцессором.
- В своих пределах спецификатор typedef более гибок, чем #define.
В дальнейшем эти имена могут использоваться для определения структур. Ниже приведен пример описания типа структуры с именем employee:
typedef struct { char name[30]; int id; dept d; family f; } employee;
где слова dept, family указывают типы, а именно типы структур, предварительно определенные пользователем. Тип структуры employee может быть использован для определения переменных. Например, определение
employee chairperson, president, e1, e2;
описывает переменные chairperson, president, e1, e2 как структуры типа employee.
Существует и другой способ ассоциирования имени с типом структуры. Этот способ основан на применении меток структуры. Метки структуры аналогичны меткам перечисляемого типа. Метка структуры описывается следующим образом:
struct метка{ список описаний }
где метка является идентификатором. В приведенном ниже примере слово student описывается как метка структуры:
struct student { char name[25]; int id,age; char sex; };
Метки структуры используются для определения структур записью вида
struct метка список-идентификаторов;
Использование меток структуры необходимо для описания рекурсивных структур, так как одного только оператора typedef недостаточно. В приведенном ниже примере описания рекурсивной метки структуры
struct node { int data; struct node *next; };