comment initialiser les membres d’un tableau de struct en C

J’ai la structure suivante:

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

Si je crée un tableau de cette structure dans mon main (comme ci-dessous), comment l’initialiserais-je?

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

Je veux initialiser le tableau de struct ci-dessus d’une manière similaire à l’initialisation d’un tableau normal (voir ci-dessous):

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

Travaillez de l’extérieur vers l’intérieur. Vous savez que vous avez 5 éléments à initialiser:

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

X est un remplaçant pour les initialiseurs de type mystruct . Alors maintenant, nous devons déterminer à quoi ressemble chaque X Chaque instance de mystruct a deux éléments, somearray et somevar , vous savez donc que votre initialiseur pour X sera structuré comme somevar :

 X = { Y, Z } 

En remplaçant la déclaration d’origine, nous obtenons maintenant

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

Maintenant, nous devons déterminer à quoi ressemble chaque Y. Y correspond à un initialiseur pour un tableau 3×2 d’ int . De nouveau, nous pouvons travailler de l’extérieur. Vous avez un initialiseur pour un tableau à 3 éléments:

 Y = { A, A, A } 

où chaque élément de tableau est un tableau à 2 éléments d’ int :

 A = { I, I } 

En revenant à Y, nous obtenons

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

En substituant cela dans X, nous obtenons

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

qui nous donne maintenant

 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 } }; 

Puisque Z est un substitut d’un entier, nous n’avons pas besoin de le décomposer davantage. Il suffit de remplacer les I et Z par des valeurs entières réelles et vous avez terminé:

 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} }; 

Enveloppez l’initialiseur pour chaque élément de structure du tableau dans un ensemble d’accolades:

 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 }, }; 

Comme ça:

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