ВЛОЖЕННЫЕ СТРУКТУРЫ
ВЛОЖЕННЫЕ СТРУКТУРЫ
Иногда бывает удобно, чтобы одна структура содержалась или была "вложена" в другую. Например, Шалала Пироски строит структуру, содержащую информацию о ее друзьях. Один элемент структуры - это, конечно, имя друга. Однако имя можно представить самой структурой с разными элементами для имени и фамилии. На рис. 14.4 приведен сокращенный пример деятельности Шалалы.
/* пример вложенной структуры */
#define LEN 20
#define M1 "Спасибо за прекрасный вечер,"
#define M2 "Вы, конечно, правы, что"
#define M3 " -своеобразный парень. Мы должны собраться"
#define М4 " отведать очень вкусный"
#define M5 "и немного повеселиться."
struct names { /*первый структурный шаблон */
char first[LEN];
char last[LEN], };
struct guy { /* второй шаблон */
struct names handle; /* вложенная структура */
char favfood[LEN];
char job[LEN];
float income;
};
main( ) {
static struct guy fellow = { /*инициализация переменной */
{" Франко," " Уотэл"},
" баклажан",
" вязальщик половиков",
15435.00 };
printf("Дорогой %s, ," fellow.handle.first);
printf(" %s %s. ", M1, fellow.handle.first);
printf(" %s %s " , M2, fellow.job);
printf(" %s " , M3);
printf(" %s %s %s ", M4, fellow.favfood, M5);
printf(" %40s %s ", " " , " До скорой встречи" );
printf(" %40s %s ", " ", Шалала");
}
РИС. 14.4. Программа вложенной структуры.
Вот результат работы программы:
Дорогой Франко,
Спасибо за прекрасный вечер, Франко.
Bы, конечно, правы. что вязальщик половиков - своеобразный парень.
Мы должны собраться отведать очень вкусный баклажан и немного повеселиться.
До скорой встречи,
Шалала
Во-первых, следует рассказать о том, как поместить вложенную структуру в шаблон. Она просто описывается точно так же, как это делалось бы для переменной типа int:
struct names handle;
Это означает, что handle является переменной типа struct names. Конечно, файл должен также содержать шаблон для структуры типа names.
Во-вторых, следует рассказать, как мы получаем доступ к элементу вложенной структуры. Нужно дважды использовать операцию "." :
fellow.handle.first = = " Франко";
Мы интерпретируем эту конструкцию, перемещаясь слева направо;
(fellow.handle).first
То есть первым находим элемент fellow, далее элемент handle структуры fellow, а затем его элемент first. Теперь рассмотрим указатели.