gpt4 book ai didi

C:少一个字段的结构。我如何有效地声明/使用它?

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:26 24 4
gpt4 key购买 nike

假设我们有两个不同的 struct,它们有大部分共同的字段,但有一个或两个不同的字段或更少的字段。例如:

typedef struct HobbyNodetag {
char *name; // hobby name
struct HobbyNodetag* link; // link to next HobbyNode
int count; // number of times this hobby was mentioned by user
// more fields...
// but identical type/variable name with MyHobbyList
} HobbyNode; // database of entire hobby node; singly linked list

typedef struct MyHobbyTag{
char *name; // hobby name
struct MyHobbyTag* link; // linked to next MyHobbyNode
// more fields...
// but identical type/variable name with EntireHobbyList
} MyHobbyNode; // single person's hobby node; singly linked list

我们是否有更高效/优雅的编码实践来使用以上两个 struct?拥有两个不同的 struct 是不是很浪费,因为它们共享大部分字段?

更新

我之前的问题具有误导性。上面的例子是节点和单链接(通过link)。

最佳答案

您可以将所有额外字段(出现在第二个结构中但不在第一个结构中)移动到结构类型定义的末尾,然后使用较小的结构作为较大结构的“基础”:

struct BaseFoo {
int count;
char name[128];
float value;
};

struct ExtendedFoo {
struct BaseFoo base;
struct ExtendedFoo *next;
};

这个解决方案的优点在于您可以拥有“多态性”:因为 C 标准保证在内存中的第一个结构成员之前没有填充,所以这将工作得很好:

void print_name(struct BaseFoo *foo)
{
printf("Count: %d\n", foo->count);
printf("Name: %s\n", foo->name);
}

struct ExtendedFoo foo = { /* initialize it */ };
print_name((BaseFoo *)&foo);

关于C:少一个字段的结构。我如何有效地声明/使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14918533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com