Членом структуры может быть или простая переменная, например, типа int или double, или составной (не скалярный) тип. В языке С составными типами являются массивы и структуры. Один составной тип вы уже видели — это символьные массивы, которые использовались в addr.
Члены структуры, которые являются массивами, можно считать такими же членами структуры, как и те, что нам известны из предыдущих примеров. Например, проанализируйте следующую структуру:
struct x { int a[10][10]; /* массив 10 x 10 из целых значений */ float b; } y;
Целый элемент с индексами 3, 7 из массива a, находящегося в структуре y, обозначается таким образом:
y.a[3][7]
Когда структура является членом другой структуры, то она называется вложенной. Например, в следующем примере структура address вложена в emp:
struct emp { struct addr address; /* вложенная структура */ float wage; } worker;
Здесь структура была определена как имеющая два члена. Первым является структура типа addr, в которой находится адрес работника. Второй член — это wage, где находятся данные по его зарплате. В следующем фрагменте кода элементу zip из address присваивается значение 93456.
worker.address.zip = 93456;
Как вы видите, в каждой структуре любой член обозначают с помощью тех структур, в которые он вложен — начиная от самых общих и заканчивая той, непосредственно в которой он находится. В соответствии со стандартом С89 структуры могут быть вложенными вплоть до 15-го уровня. А стандарт С99 допускает уровень вложенности до 63-го включительно.