如何使用联合在1 C数组中存储2个不同的结构

如何使用联合在1 C数组中存储2个不同的结构,c,struct,C,Struct,我想创建一个数组来存储两种类型的C结构-Employee,以及它的“子对象”Manager。我创建了一个unionPerson来容纳他们中的任何一个,然后尝试用它创建一个数组,但它不起作用。我怎样才能让这样一个数组工作?相关代码如下 typedef struct { char name[20]; double salary; } Employee; //Manager struct inheriting from employee struct typede

我想创建一个数组来存储两种类型的C结构-
Employee
,以及它的“子对象”
Manager
。我创建了一个union
Person
来容纳他们中的任何一个,然后尝试用它创建一个数组,但它不起作用。我怎样才能让这样一个数组工作?相关代码如下

 typedef struct {    
    char name[20]; 
    double salary;
    } Employee;

//Manager struct inheriting from employee struct
typedef struct {
    Employee employee;   
    int bonus;
} Manager;  

typedef union{ 
       Employee e;
       Manager m;
      } Person;
Manager boss;
Employee harry ;
Employee tommy;
Person staff[]; 

int main(void)
{
...
boss = newManager(...);
  harry = newEmployee(...);       
  tommy = newEmployee(...);
我没能让下一行工作,我尝试了很多东西

  staff[3] = {boss, harry, tommy};
尝试:

或者可能:

Person staff [] = {
    {.manager = boss},
    {.employee = harry},
    /* ... */
};

但是问问你自己:你以后怎么知道
员工[x]
是经理还是员工?

从技术上讲,你的工会是不必要的,因为经理包含一个“员工”作为第一个成员,任何经理实例都可以作为员工访问。但是,这不会使代码变得非常干净:)谢谢,
staff[0].m=boss能够编译。我以前也试过类似的方法,但我想当时出现了不同的问题。
Person staff [] = {
    {.manager = boss},
    {.employee = harry},
    /* ... */
};