Initialisation d’un tableau de structure dans un tableau de structure

J’ai une question dans l’initialisation de mon tableau de structure à l’intérieur d’un tableau de structure. par exemple si j’ai un code comme ci-dessous:

#include  int main() { typedef struct { int a; int b; int c; } FIRST_T; typedef struct { int x; int y; int z; FIRST_T *p; } SECOND_T; FIRST_T p1[]={{1,2,3},{3,4,5},{6,7,8}}; FIRST_T p2[]={{4,5,6},{7,8,9}}; SECOND_T my_second[]= { {1,2,3,p1}, {4,5,6,p2} }; } 

si je dois initialiser mon premier tableau dans la deuxième partie d’initialisation de tableau proprement dite, comment puis-je écrire mon typefef de SECOND_T? comme

 SECOND_T my_second[]= { {1,2,3,{{1,2,3},{4,5,6},{7,8,9}}}, {4,5,6,{{1,1,1},{2,2,2}}} }; 

alors comment devrait être mon SECOND_T?

Je suis sûr que je ne peux pas le définir comme:

 typedef struct { int x; int y; int z; FIRST_T p[]; //(I know its a blunder) } SECOND_T; 

S’il vous plaît aider.

Vous ne pouvez pas définir un type avec un tableau non lié en C, vous devez spécifier la dimension. Donc soit vous faites:

 typedef strut { int x; int y; int z; FIRST_T f[SOME_VALUE]; } SECOND_T; 

puis initialisez SOME_VALUE nombre de membres SOME_VALUE ou procédez comme vous l’avez fait.

Je ne pense pas que vous puissiez le faire, c’est-à-dire initialiser le FIRST_T dans l’initialisation de SECOND_T , à l’exception de la première façon dont vous le faites. Pensez-y, comment le compilateur peut-il dire combien de FIRST_T y a-t-il dans SECOND_T ? Le problème ici est que vous ne pouvez PAS définir un tableau de structure de taille flexible statiquement .

vous ne pouvez pas faire comme ça:

 SECOND_T my_second[]= { {1,2,3,{{1,2,3},{4,5,6},{7,8,9}}}, {4,5,6,{{1,1,1},{2,2,2}}} }; 

avec

 typedef struct { int x; int y; int z; FIRST_T p[]; //(I know its a blunder) 

} SECOND_T;

Parce que le compilateur ne sait pas comment malloc mémoire pour cette structure. si vous devez faire comme ça, vous devez définir

 typedef struct { int x,y,z; FIRST_T p[CONST_VALUE];}SECOND_T; 

mais je vous conseille d’utiliser le premier style que vous écrivez.

Je ne sais pas si je saisis bien la question que vous avez. Si vous voulez éviter de devoir déclarer une variable auxiliaire pour les pointeurs de la structure, vous pouvez utiliser un littéral composé comme suit:

 SECOND_T my_second[] = { {1,2,3, &(FIRST_T){{1,2,3},{3,4,5},{6,7,8}}}, {4,5,6, &(FIRST_T){{4,5,6},{7,8,9}}} }; 

Vous auriez un compilateur conforme à C99 pour cela.