0
我正在阅读tcp/ip说明的v2并与本书中的一系列代码混淆。当我读取bsd的核心代码时,无法处理看似不必要的指针指针4.4
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;
是吗?
变量'p'是一个局部变量。如果你只有'struct ifnet * p',那么你只能修改该局部变量,并且一旦函数结束,这些变化就会丢失。通过使用指向指针的指针,改变'* p'将永久修改'p'指向的内容。在这种情况下,将节点添加到链接列表。 –
非常感谢bro – WaldenShen