Cómo inicializar miembros de una matriz de estructura en C

Tengo la siguiente estructura:

typedef struct { int someArray[3][2]; int someVar; } myStruct; 

Si creo una matriz de esta estructura en mi main (como la siguiente), ¿cómo la inicializaría?

 int main() { myStruct foo[5]; } 

Quiero inicializar la matriz de estructura anterior de una manera similar a la de iniciar una matriz normal (ver más abajo):

 int main() { int someArray[5] = {1,4,0,8,2}; } 

Trabaja desde afuera hacia adentro. Sabes que tienes una serie de 5 cosas para inicializar:

 mystruct foo[5] = { X, X, X, X, X }; 

donde X es un suplente para inicializadores de tipo mystruct . Así que ahora tenemos que averiguar cómo se ve cada X Cada instancia de mystruct tiene dos elementos, somearray y somevar , por lo que sabe que su inicializador para X se estructurará como

 X = { Y, Z } 

Sustituyendo de nuevo en la statement original, ahora obtenemos

 mystruct foo[5] = { { Y, Z }, { Y, Z }, { Y, Z }, { Y, Z }, { Y, Z } }; 

Ahora tenemos que averiguar cómo se ve cada Y. Y corresponde a un inicializador para una matriz 3×2 de int . Nuevamente, podemos trabajar desde afuera hacia adentro. Usted tiene un inicializador para una matriz de 3 elementos:

 Y = { A, A, A } 

donde cada elemento de la matriz es una matriz de 2 elementos de int :

 A = { I, I } 

Substituyendo de nuevo en Y, obtenemos

 Y = { { I, I }, { I, I }, { I, I } } 

Sustituyendo eso de nuevo en X, obtenemos

 X = { { { I, I }, { I, I }, { I, I } }, Z } 

que ahora nos da

 mystruct foo[5] = { { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z }, { { { I, I }, { I, I }, { I, I } }, Z } }; 

Dado que Z es un complemento para un entero, no necesitamos dividirlo más. Simplemente reemplace I s y Z s con valores enteros reales, y listo:

 mystruct foo[5] = { {{{101, 102}, {201, 202}, {301, 302}}, 41}, {{{111, 112}, {211, 212}, {311, 312}}, 42}, {{{121, 122}, {221, 222}, {321, 322}}, 43}, {{{131, 132}, {231, 232}, {331, 332}}, 44}, {{{141, 142}, {241, 242}, {341, 342}}, 45} }; 

Envuelva el inicializador para cada elemento de estructura de la matriz en un conjunto de llaves:

 myStruct foo[5] = { { { { 11, 12 }, { 13, 14 }, { 55, 56 }, }, 70 }, { { { 21, 22 }, { 23, 24 }, { 45, 66 }, }, 71 }, { { { 31, 32 }, { 33, 34 }, { 35, 76 }, }, 72 }, { { { 41, 42 }, { 43, 44 }, { 25, 86 }, }, 73 }, { { { 51, 52 }, { 53, 54 }, { 15, 96 }, }, 74 }, }; 

Como eso:

 int main() { // someArr initialization | someVar initialization mystruct foo[5] = { { { {1, 2}, {1,2}, {1, 2} }, 1 }, // foo[0] initialization //... }; }