我宣布包含有关某人信息的结构:
名
日期/时间添加到列表中 血型
需要器官类型
稍后将信息与从文件中读取的一些信息进行比较,但我现在有一个更普遍的问题。
考虑这种实施:
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
内?
答案 0 :(得分:1)
如果您只想要union
定义中的许多可能变量类型之一,那么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
。
您可以在dateT
中定义timeT
和personT
,但唯一的好处是阻止他人声明该类型的struct
。他们需要声明struct
类型的personT
才能将这些类型作为子类型。
答案 1 :(得分:1)
我不太确定你想在这里使用union,因为你需要时间和日期信息。
通常,我会使用标准类型time_t来表示时间点,然后通过标准库函数将其转换为人类可解析的时间单位(struct tm),如localtime() / {{ 3}}。这样可以省去处理时区,夏令时变化等问题的麻烦。