我在C中初始化一组结构时遇到了问题。 这是我的结构:
typedef struct Voie {
int num;
int sem_num[3];
int crois[3];
} Voie;
两个数组将包含0,2或3个整数。
我有一个12“Voie”阵列:
Voie voies[12];
我希望用这些参数初始化这些参数:
{1,{0,16,1},{4,7,8}}
{2,{2,3},{4,5}}
{3,{},{}}
{4,{4,17,5},{7,10,11}}
{5,{6,7},{7,8}}
{6,{},{}}
{7,{8,17,9},{10,1,2}}
{8,{10,11},{10,11}}
{9,{},{}}
{10,{12,16,13},{1,4,5}}
{11,{14,15},{1,2}}
{12,{},{}}
我尝试过一个函数返回一个结构,用开关分隔每个case,但是有重新定义的问题。 然后我发现我认为是最好的解决方案,但仍然不能让它运行:
int cas[][] = { {1,{0,16,1},{4,7,8}},
{2,{2,3},{4,5}},
{3,{},{}},
{4,{4,17,5},{7,10,11}},
{5,{6,7},{7,8}},
{6,{},{}},
{7,{8,17,9},{10,1,2}},
{8,{10,11},{10,11}},
{9,{},{}},
{10,{12,16,13},{1,4,5}},
{11,{14,15},{1,2}},
{12,{},{}} };
for (i=0 ; i<12 ; i++) {
voies[i] = cas[i];
}
我甚至不确定这是否可行,因为以下有效:
Voie v = {1,{0,16,1},{4,7,8}};
但不是以下内容:
int tab[] = {1,{0,16,1},{4,7,8}};
Voie v = tab;
另外:初始化后,如何访问结构中的每个元素?
感谢您的帮助。
答案 0 :(得分:6)
您只需使用以下命令初始化数组:
编辑:
Voie voies[12] = {
{1,{0,16,1},{4,7,8}},
{2,{2,3,},{4,5,}},
{3,{0,},{0,}},
{4,{4,17,5},{7,10,11}},
{5,{6,7,},{7,8,}},
{6,{0,},{0,}},
{7,{8,17,9},{10,1,2}},
{8,{10,11,},{10,11,}},
{9,{0,},{0,}},
{10,{12,16,13},{1,4,5}},
{11,{14,15,},{1,2,}},
{12,{0,},{0,}}
};
答案 1 :(得分:2)
您可以访问voies [5] .sem_num [0]等元素。
如果我没错,上面的示例值将是17.
答案 2 :(得分:2)
您的声明cas[][]
和使用空{}
的初始化都不是标准C。
声明中最多只能有一个空[]
,并且您必须在0
内放置至少一个{}
。