初始化结构数组内的结构数组
我在结构数组中初始化结构数组时遇到了一个问题。 例如,如果我有如下代码:
#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的编译器。