c - c语言双向链表使用二级指针有什么好处?

标签 c pointers nginx

<分区>

nginx 中的每个工作进程都有一个发布的事件队列。 ngx_event_t 有两个指针,next 和 prev:

/* the links of the posted queue */
ngx_event_t *next;
ngx_event_t **prev;

nginx使用这两个指针来实现posted事件队列,next指向下一个事件,prev指向前一个事件的next指针。 后期操作:

ev->next = (ngx_event_t *) *queue;  
ev->prev = (ngx_event_t **) queue;        
*queue = ev;                   
if (ev->next) {                                                       
    ev->next->prev = &ev->next;                                      
} 

删除操作:

*(ev->prev) = ev->next;  
if (ev->next) {              
    ev->next->prev = ev->prev;
}

为什么prev要用二级指针类型?有什么好处?

最佳答案

指针的级别取决于您如何访问存储在指针变量中的内存地址。如果您从指针取消引用它,那么您需要单指针。如果你从指针到指针取消引用它,那么你需要双指针,等等。在您的情况下,您正在从一个指针到另一个指针取消引用它,这就是为什么您需要在那里使用双指针的原因。

关于c - c语言双向链表使用二级指针有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855253/

相关文章:

c - 无法使用 C 编译器打开包含文件 "Protocols.h"

c - 当收到第一个数据报时,recvfrom() 不填充结构 `sockaddr`

ruby-on-rails - 使用 nginx + unicorn 的多个 Rails 4 应用程序

ssl - 如何为 nginx docker 实例指定特定的密码套件?

java - 我有两个非常相似的 C 函数被 python 和 Java 调用。如何将 2 个库合并为 1 个可以从两种语言调用的库?

c - 在 C 中使用数组 [100] 时出现运行时错误

C运算符+=序列点?

c - 如何在C中使用指向数组的指针进行最小堆排序?

c++ - 删除char的正确方法是什么**

node.js - 使用 Passport 和 Nginx 作为代理服务器的身份验证问题 Node.js