ВЛОЖЕННЫЕ СТРУКТУРЫ

ВЛОЖЕННЫЕ СТРУКТУРЫ

     Иногда бывает удобно, чтобы одна структура содержалась или была "вложена" в другую. Например, Шалала Пироски строит структуру, содержащую информацию о ее друзьях. Один элемент структуры - это, конечно, имя друга. Однако имя можно представить самой структурой с разными элементами для имени и фамилии. На рис. 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. Теперь рассмотрим указатели.