gpt4 book ai didi

c - 当我阅读 bsd 4.4 的核心代码时,无法处理似乎不必要的指针

转载 作者:行者123 更新时间:2023-11-30 16:47:48 25 4
gpt4 key购买 nike

我正在阅读《tcp/ip 图解 v2》,并对书中的一系列代码感到困惑。

struct ifnet{
struct ifnet * if_next;
……
}

这里是该结构的背景信息,可以帮助您更多地了解该问题

void if_attach(struct ifnet* ifp){
struct ifnet **p = &ifnet;
while(*p):
p = &((*p)->if_next);
*p = ifp;

为什么作者在这个地方使用了指向指针的指针?我保证在剩余的文本中 p 永远不会再出现(这意味着它根本不会用作任何函数的参数)。

在我看来,这段代码可以转换成这样

struct ifnet *p = ifnet;
while(p):
p = *p->if_next;
p = ifp;

是吗?

最佳答案

作者使用了指向指针的指针,因为他们注意到他们利用了抽象的共性。它是“通过链接遍历列表”而不是通过节点。

您显然知道,如果您的链表数据结构是由指针引用的,那么您必须将指向该指针的指针传递到您的函数中,以防插入或删除发生在头节点上。否则,您将修改相关节点的内部指针。

但是,如果您也通过地址引用这些内部节点指针,而不是通过它们所在的节点来访问它们,该怎么办?那么,头节点和所有内部节点的代码就变得相同了。

关于c - 当我阅读 bsd 4.4 的核心代码时,无法处理似乎不必要的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43209179/

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