我对C有点新意,所以请耐心等待。 我有一个结构,包含其他结构的联合,可变大小如下:
typedef struct _obj_struct {
struct_type type;
union obj {
struct1 s1;
struct2 s2;
struct3 s3;
} s_obj;
} obj_struct;
typedef struct _t_struct {
unsigned int number_of_obj;
obj_struct* objs;
other_struct os;
unsigned int loop;
} t_struct;
struct_type是我们在union中使用的结构的类型。 我如何浏览objs中的所有元素? 这是正确的方法:
struct1 s1;
struct2 s2;
struct3 s3;
for (j=0; j<t_struct.number_of_obj; j++)
{
switch (t_struct.obj[j].type) {
case STRUCT1:
s1 = t_struct.objs[j].s_obj.s1;
break;
case STRUCT2:
s2 = t_struct.objs[j].s_obj.s2;
break;
}
}
答案 0 :(得分:1)
t_struct.obj[j].s_obj
是联合,而不是实际结构。你必须使用t_struct.obj[j].s_obj.s1
等。
答案 1 :(得分:1)
除非您需要每个结构的副本,否则请使用指针:
struct1 *s1;
// ...
s1 = &t_struct.objs[j].s_obj.s1;
请注意,您还必须指定联合的元素。
答案 2 :(得分:1)
访问结构中包含的union成员时,一般语法是
structVariable.unionVariable.memberName
如果您只是在最后添加成员名称,那么您访问的方式很好。所以正确的版本是:
switch (t_struct.objs[j].type) {
case STRUCT1:
s1 = t_struct.objs[j].s_obj.s1;
break;
case STRUCT2:
s2 = t_struct.objs[j].s_obj.s2;
break;
}