C 在结构中定义结构&;什么时候使用工会?
我声明包含个人信息的结构: 名称C 在结构中定义结构&;什么时候使用工会?,c,nested,structure,C,Nested,Structure,我声明包含个人信息的结构: 名称 添加到列表中的日期/时间 血型 需要的器官类型 稍后会将这些信息与从文件中读取的一些信息进行比较,但我现在有一个更一般的问题 考虑到这一执行情况: typedef struct { short month; short day; } dateT; typedef struct { short hour; short minute; } timeT; typedef struct { char name[SIZE];
添加到列表中的日期/时间
血型
需要的器官类型 稍后会将这些信息与从文件中读取的一些信息进行比较,但我现在有一个更一般的问题 考虑到这一执行情况:
typedef struct {
short month;
short day;
} dateT;
typedef struct {
short hour;
short minute;
} timeT;
typedef struct {
char name[SIZE];
char organName[SIZE];
char bloodType[BT_LEN];
dateT dateAdded;
timeT timeAdded;
} personT;
如果将所有这些信息放在一个单一结构(没有子结构)中不是一个选项,那么将这三个相关结构放在一个联合或嵌套
dateT
和timeT
内部personT
中是否更有效 Aunion
如果您只需要union
定义中许多可能的变量类型中的一种,那么它将是一个不错的选择。例如,如果您只需要时间或日期,可以执行以下操作:
typedef struct
{
short month;
short day;
} dateT;
typedef struct
{
short hour;
short minute;
} timeT;
typedef union
{
dateT dateAdded;
timeT timeAdded;
} myUnion;
myUnion.timeAdded.hour = 5; // timeAdded "exists"; dateAdded does not "exist"
myUnion.dateAdded.day = 7; // timeAdded doesn't "exist" anymore; dateAdded "exists" now
关于你的问题,如何最好地定义结构和子结构,答案实际上取决于你。您可以定义一个struct
,该结构包含您可能需要的所有数据,但它可能很长且难以读取。如果合理的话,您可以将逻辑变量一起分离到另一个struct
您可以在
personT
中定义dateT
和timeT
,但这样做的唯一好处是防止其他人声明该类型的struct
。他们需要声明personT
类型的struct
,以便将这些类型作为子类型。我不太确定您在这里使用union的目的是什么,因为您需要时间和日期信息
通常,我会使用标准类型来表示时间点,然后通过标准库函数(如/)将其转换为人类可解析时间单位(struct tm)。这会让你省去处理时区、夏令时变化等问题时的一些麻烦。联盟中的事物占用相同的内存空间,而且一次只能使用其中一种事物。可能不是您想要的。如果您只想在联合定义中使用多种可能的变量类型中的一种,您所说的
…是什么意思。
?在代码中的联合定义中,您已经包含了时间和日期。如果您声明myUnion的一个实例,您将有效地创建时间和日期,对吗?不,union
s不是这样工作的。在我给出的示例中,只能使用dateAdded
或timeAdded
,而不能同时使用这两种。如果两者都需要,请使用struct
@sherrellbc我在联合
答案中添加了更多内容。希望这会有所帮助。我对此做了更多的研究,结果显示,联合中包含的任何内容都存在于内存中的同一位置,并且所需的内存空间占用了两个数据中较大的一个。在那个位置实际存在的是最近设置的内存。在提出这个问题之前,我的印象是,工会是一种创造工会的类型,从某种意义上说,它是一个巨大的结构或其他东西。我现在看到了不同之处,谢谢你。@sherrellbc Bravo对它进行了研究,而不仅仅是相信我的话。