Таблица 4. Массив структур.

  название автор г од издания
lib[0] lib[0].title lib[0].author lib[0].year
lib[1] lib[1].title lib[1].author lib[1].year
lib[2] lib[2].title lib[2].author lib[2].year
lib[99 lib[99].title lib[99].author lib[99].year

 

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

struct bool lib = {

"Евгений Онегин",

"Пушкин А.С.",

1995

};

При выполнении данного фрагмента программы в переменные структуры title, author и year будет записана соответственно информация:

“Евгений Онегин”, “Пушкин А.С.”, 1995.

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

Стандарт C99 допускает более гибкий механизм инициализации полей структуры:

struct book lib = {.year = 1995,

.author = "Пушкин А.С.",

.title = "Евгений Онегин" };

или

struct book lib = { .year = 1995,

.title = "Евгений Онегин" };

или

struct book lib = {.author = "Пушкин А.С.",

.title = "Евгений Онегин",

1995 };

В первом и во втором примерах при инициализации указываются наименования полей через точку.

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

В некоторых случаях имеет смысл создавать структуры, которые содержат в себе другие (вложенные) структуры.

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

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

struct tag_fio

{ char last[100];

char first[100];

char otch[100];

};

struct tag_people