Переменные структуры

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

struct { общие компоненты; метка активного компонента; union { описание компонента 1 описание компонента 2... описание компонента n } идентификатор;}

Ниже приведен пример определения переменной структуры health_record:

struct {/* общая информация */ char name[25]; int age; char sex; /* метка активного компонента */ marital_status ms; /* переменная часть */ union { /* холост */ /* нет компонентов */ /* женат */ struct { char marriage_date[8]; char spouse_name[25]; int no_children; } /* разведен */ char date_divorced[8]; } marital_info;} health_record;

где тип marital_status, т.е. тип метки активного компонента ms, описан как

typedef enum {SINGLE, MARRIED, DIVORCED} marital_status;

Ниже приведены несколько примеров ссылки на компоненты переменной структуры:

health_record.namehealth_record.mshealth_record.marital_info.marriage_date

Указатели и структуры

Рассмотрим метку структуры student, описание которой было дано выше как

struct student { char name[25]; int id, age; char sex;}

Указатель new_student определен как

struct student *new_student;

Предположим, что память выделена таким образом, чтобы new_student указывал на объект student. Тогда на компоненты этого объекта можно ссылаться следующим образом:

(*new_student).name(*new_student).id(*new_student).age(*new_student).sex

Поскольку указатели часто используются для указания на структуры, в языке Си специально для ссылок на компоненты таких структур введен оператор выбора стрелка вправо ->. Например, ссылки на вышеприведенные компоненты структуры можно записать с использованием оператора стрелки вправо -> как:

new_student->namenew_student->idnew_student->agenew_student->sex

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: