如何确定输出时使用的联合类型?

时间:2015-11-02 15:49:48

标签: c struct unions

我在结构中使用了一个联合类型来定义这个人是学生还是员工。当我试图输出结构数组中的信息时,我发现我很难弄清楚这个人是什么类型,而不是输出更多信息。不要告诉我停止使用工会,抱歉,我被要求这样做。 她是我简化的数据结构:

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

2 个答案:

答案 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];

然后,在分配结构时,只需将其与工会一起设置。