Одним из полей структуры (внешней) может быть другая структура (внутренняя, вложенная). При этом возможны два способа описания шаблона.
Способ 1. Совместное описание структур (внешней и вложенной):
struct STUDENT { char name [30]; /* поле внешней структуры */
struct { int day; /* шаблон вложенной структуры */
int month;
int year;
} born; /* поле вложенной структуры */
};
Такое описание шаблонов выглядит громоздким.
Способ 2. Раздельное описание шаблонов:
struct DATA { int day; int month; int year; }; /* шаблон структуры */
struct STUDENT { char name [30]; /* поле внешней структуры */ struct DATA born; /* поле вложенной структуры */ };
Глубина вложения структур неограниченна. Единственное ограничение – структура не может вкладываться сама в себя, то есть некорректно следующее описание:
struct STUDENT{ char name [30];
struct STUDENT my_own; /* ОШИБКА!*/
};
Однако разрешается использовать в описываемом шаблоне поле - указатель (ссылку) на описываемую структуру, например, корректно такое описание:
struct STUDENT { char name [30];
struct STUDENT *my_own; /* допустимый указатель на собственную структуру */
};
Обращение к полям структуры
Для доступа к отдельным полям структурной переменной (не указателя) используется операция ‘.’ (точка), формирующая ссылку на поле по схеме:
переменная. поле