如何在C中创建一个数组来容纳2种类似类型的结构?

如何在C中创建一个数组来容纳2种类似类型的结构?,c,inheritance,struct,C,Inheritance,Struct,我用C语言模拟继承,但不确定具体的方式。我创建了两个结构,Employee和Director,其中Director应该从Employee“继承”。如何创建一个能够容纳正式员工和董事的阵列?这不起作用: Employee workers[3] 下面是我的Director结构代码: typedef struct { Employee employee; int bonus; } Director; 创建一个可以包含董事或员工的工会,并设置一个标志,说明您正在使用工会的哪一部

我用C语言模拟继承,但不确定具体的方式。我创建了两个结构,Employee和Director,其中Director应该从Employee“继承”。如何创建一个能够容纳正式员工和董事的阵列?这不起作用:

Employee workers[3]
下面是我的Director结构代码:

typedef struct {
    Employee employee;   
    int bonus;
} Director;

创建一个可以包含董事或员工的工会,并设置一个标志,说明您正在使用工会的哪一部分。然后声明该工会类型的数组。

创建一个可以包含董事或员工的工会,并创建一个标志,说明您正在使用工会的哪一部分。然后声明该联合类型的数组。

您。。。至少不能这样。即使允许,会发生什么?据我所知,sizeofEmployee!=sizeofDirector,那么应该如何分配内存呢?如果我从数组中抓取一个Employee并尝试访问Director对象的Employee字段,会发生什么情况?这是行不通的,有充分的理由


但是,您可以使用工会作为一种类型,它可以容纳员工或董事,并创建这些人的数组。

您。。。至少不能这样。即使允许,会发生什么?据我所知,sizeofEmployee!=sizeofDirector,那么应该如何分配内存呢?如果我从数组中抓取一个Employee并尝试访问Director对象的Employee字段,会发生什么情况?这是行不通的,有充分的理由


但是,您可以使用工会作为一种类型,它可以容纳一名员工或一名董事,并创建这些人的数组。

您缺少了一个关键部分—一个在运行时用来区分董事和员工的标志;此标志进入struct Employee


现在,您可以声明一个指向雇员的指针数组,它不能是雇员数组,因为董事不适合。您可以将指向Director的指针强制转换回Employee,因为指向结构的指针始终与指向其第一个成员的指针相同。

您缺少一个关键部分—一个在运行时用来区分Director和Employee的标志;此标志进入struct Employee


现在,您可以声明一个指向雇员的指针数组,它不能是雇员数组,因为董事不适合。您可以将指向Director的指针强制转换回Employee,因为指向结构的指针始终与其第一个成员的指针相同。

您可以创建指向Employee的指针数组。 假设Employee的长度为64字节,那么如果您创建一个3字节的数组,那么该数组的长度将为192字节,如果您需要一个3个控制器的数组,那么每个结构将额外增加2个字节,那么您的整个数组的长度将为198字节,这就是您无法获得所需数组的原因。 如果将数组创建为指向Employee的指针,则该数组将只包含指针,因此它将是3个4字节=12字节的空间,并且指针的大小始终相同,因此可以存储指向不同大小结构的指针。 您只需考虑以下几点:

每个项目都需要取消引用。 您需要为每个项目请求一些动态内存,否则在函数结束时,您的项目将丢失。 当你不再需要它时,要非常小心地释放它。 在取消引用指针之前,请确认指针不为null,否则程序将崩溃。
我希望这是有用的,祝你好运

您可以创建指向员工的指针数组。 假设Employee的长度为64字节,那么如果您创建一个3字节的数组,那么该数组的长度将为192字节,如果您需要一个3个控制器的数组,那么每个结构将额外增加2个字节,那么您的整个数组的长度将为198字节,这就是您无法获得所需数组的原因。 如果将数组创建为指向Employee的指针,则该数组将只包含指针,因此它将是3个4字节=12字节的空间,并且指针的大小始终相同,因此可以存储指向不同大小结构的指针。 您只需考虑以下几点:

每个项目都需要取消引用。 您需要为每个项目请求一些动态内存,否则在函数结束时,您的项目将丢失。 当你不再需要它时,要非常小心地释放它。 在取消引用指针之前,请确认指针不为null,否则程序将崩溃。 我希望这是有用的,祝你好运