gpt4 book ai didi

c - 定义一个结构,其中一个成员指向另一个成员

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

我正在尝试用 C 编写网络程序。我有相互链接的节点,我想通过使结构成员指向另一个成员(而不是另一个节点,因为我想保留链接的身份)。我为此编写的代码是这样的:

struct node{
int k; //number of links
struct node.link **link; //<- wrong
};

但是这是不对的,因为节点不是变量而是变量的一种类型(这已经在另一个 QA 中被讨论为错误:首先你必须定义一个节点类型的变量然后应用 .link,但是这在这里没有帮助)。还有一个名为“Struct member point at another struct member”的 QA,但他们不是根据定义来做的,而且不太清楚如何概括它(至少对我而言)。

这样做是否正确?

最佳答案

问题在于 C 语言不允许您创建所需的类型。您需要具有属性 *T 的类型 T 与 T 具有相同的类型。你不能那样做。 (好吧,函数指针具有该属性,但这是无关紧要的技术问题。)

你得介绍一个新名字。 C 仅允许您使用结构或类似结构来执行此操作。

struct link {
struct link *ptr;
};
struct node {
int k;
struct link *link;
};

这会让你得到你想要的。现在,为了从 struct link *struct node *,您必须进行一些指针数学运算:

struct node *node_from_link(struct link *link) {
return (struct node *) ((char *) link - offsetof(struct node, link));
}

这也是由 container_of 宏提供的,它不是 C 标准的一部分,但您可以在网上找到它的定义。

或者,您也可以走传统路线。

// Usually easier to do it this way...
struct node {
int k;
struct node *link;
};

关于c - 定义一个结构,其中一个成员指向另一个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682473/

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