Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-1.doc
Скачиваний:
1
Добавлен:
13.11.2018
Размер:
79.36 Кб
Скачать

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

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

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 {SINGL,MARRIED, DIVORCED}

marital_status;

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

health_record.name

health_record.ms

health_record.marital_info.marriage_date

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

Рассмотрим метку структуры 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->name

new_student->id

new_student->age

new_student->sex

2.6. Массив структур

Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива:

struct book libry[MAXBKS];

Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book. Таким образом, libry[0] является book-структурой, libry[1] - второй book-структурой и т.д.

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

libry[0].value value - первый элемент массива

libry[4].title title - пятый элемент массива

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]