初始化结构数组内的结构数组

我在结构数组中初始化结构数组时遇到了一个问题。 例如,如果我有如下代码:

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

如果我必须在第二个数组初始化部分本身初始化我的第一个数组,那么我将如何编写我的typedef SECOND_T? 喜欢

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

那我的SECOND_T怎么样?

我确信我无法将其定义为:

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

请帮忙。

您无法在C中定义具有无界数组的类型,您必须指定维度。 所以你要么:

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

然后始终初始化成员的SOME_VALUE计数,或者按照您的方式执行。

我认为你不能这样做,即在FIRST_T的初始化中初始化SECOND_T ,而不是你做的第一种方式。 想一想,编译器如何FIRST_T中有多少SECOND_T ? 这里的问题是,你不能静态地定义一个灵活大小的struct数组

你不能这样做:

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

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

} SECOND_T;

因为编译器不知道如何为此结构使用malloc内存。 如果你必须这样做,你应该定义

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

但我建议你使用你写的第一种风格。

我不知道我是否完全抓住了你的问题。 如果您要避免必须为结构中的指针声明辅助变量,则可以使用复合文字,如下所示:

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

你有一个符合C99的编译器。