Иногда поля структуры сами являются структурными переменными. Такие поля называются вложенными. Так, например, необходимо описать с помощью структуры параметры человека. Поле FIO будет содержать вложенные поля: Fam – фамилия, Imya – имя и Otch – отчество. А поле даты рождения DataR будет содержать вложенные поля: Den – день, Mes – месяц и God – год.
При создании подобных структур необходимо соблюдать порядок объявления типов. Сначала объявляются типы вложенных полей, а затем уже общий тип, который содержит вложенные поля, например:
struct TypeFIO { // тип фамилии, имени и отчества
char Fam[20];
char Imya[20];
char Otch[20];
};
struct TypeData { // тип даты
int Den;
int Mes;
int God;
};
struct TypePerson { // тип человека
TypeFIO FIO; // поле фамилии, имени, отчества (вложенное)
TypeData DataR; // поле даты рождения (вложенное)
int Ves; // поле веса
int Rost; // поле роста
};
Теперь можно создавать структурные переменные типа TypePerson, например:
TypePerson P;
В результате будет создана переменная следующего вида:
Синтаксис доступа к вложенным полям структурной переменой:
|
|
ИмяСтруктурной Переменной. ИмяПоля. ИмяВложенногоПоля
Опишем блок ввода полей переменной P с клавиатуры с выдачей подсказки на экран:
printf (" Fam ");
scanf ("%s", P.FIO.Fam);
printf (" Imya ");
scanf ("%s", P.FIO.Imya);
printf (" Otch ");
scanf ("%s", P.FIO.Otch);
printf (" Den ");
scanf ("%d", &P.DataR.Den);
printf (" Mes ");
scanf ("%d", &P.DataR.Mes);
printf (" God ");
scanf ("%d", &P.DataR.God);
printf (" Ves ");
scanf ("%d", &P.Ves);
printf (" Rost ");
scanf ("%d", &P.Rost);
Поскольку поля Ves и Rost являются обычными полями, то при обращении к ним операция «точка» использовалась только один раз. Для доступа к остальным полям, которые являются вложенными, операция «точка» использовалась дважды.