我在结构中使用了一个联合类型来定义这个人是学生还是员工。当我试图输出结构数组中的信息时,我发现我很难弄清楚这个人是什么类型,而不是输出更多信息。不要告诉我停止使用工会,抱歉,我被要求这样做。 她是我简化的数据结构:
typedef union student_or_staff{
char *program_name;
char *room_num;
}student_or_staff;
typedef struct people{
char *names;
int age;
student_or_staff s_or_s;
}people[7];
答案 0 :(得分:4)
了解union
中存储内容的唯一方法是将此信息包含在其他地方。
当你处理一组union
s(或struct
s持有union
)时会发生两种常见情况:
union
保持相同的类型,或union
都可以拥有自己的类型。当数组中的所有union
保持相同类型时,指示union
保持的类型的单个变量就足够了。
当每个union
可以保持不同的类型时,常见的方法是将其包装在struct
中,并添加一个标记,指示union
的设置方式。使用您的示例,该标志应添加到struct people
,如下所示:
enum student_staff_flag {
student_flag
, staff_flag
};
typedef struct people{
char *names;
int age;
enum student_staff_flag s_or_s_flag;
student_or_staff s_or_s;
}people[7];
答案 1 :(得分:3)
不可能在C中执行此操作,但作为一种解决方法,您可以在此工具中添加类型
enum { student_type, staff_type } PEOPLE_TYPE;
typedef union student_or_staff{
char *program_name;
char *room_num;
}student_or_staff;
typedef struct people{
char *names;
int age;
student_or_staff s_or_s;
PEOPLE_TYPE people_type;
}people[7];
然后,在分配结构时,只需将其与工会一起设置。