Массивы и структуры внутри структур

Содержание

Членом структуры может быть или простая переменная, например, типа 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-го включительно.