Да, только для чтения. "Фиксированный", подсказывает мне Sharpnull. Ещё он нашёл Flexible array member:
struct Машина {
int количество_дверей;
struct дверь {
int спереди, сзади, слева, справа;
} дверь[];
} машина = {
4, { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 2,} };
int test = машина.дверь[3].справа;
//test == 2;
Но им, почему-то, нельзя создать массив структур Машина, даже динамический, чтобы можно было "машина[5].дверь[3].справа;"
В итоге я сдался.
Мягко говоря, удивлён, что это не типичная задача.