用container_of宏解决链表问题

avatar
作者
猴君
阅读量:0

container_of 宏是一个用于在 Linux 内核中获取容器结构体指针的实用宏

以下是一个简单的示例,说明如何使用 container_of 宏解决链表问题:

#include<stdio.h> #include <stdlib.h>  // 定义一个链表节点结构体 typedef struct list_node {     int data;     struct list_node *next; } ListNode;  // 定义一个包含链表节点的容器结构体 typedef struct container {     int id;     ListNode node; } Container;  // 创建一个新的容器并初始化其链表节点 Container *create_container(int id, int data) {     Container *container = (Container *)malloc(sizeof(Container));     container->id = id;     container->node.data = data;     container->node.next = NULL;     return container; }  // 使用 container_of 宏获取容器结构体指针 Container *get_container_from_node(ListNode *node) {     return container_of(node, Container, node); }  int main() {     // 创建两个容器并初始化其链表节点     Container *container1 = create_container(1, 10);     Container *container2 = create_container(2, 20);      // 将两个容器的链表节点连接起来     container1->node.next = &container2->node;      // 通过链表节点获取容器结构体指针     Container *found_container = get_container_from_node(container1->node.next);      // 输出找到的容器的 ID 和数据     printf("Found container with ID: %d and data: %d\n", found_container->id, found_container->node.data);      // 释放分配的内存     free(container1);     free(container2);      return 0; } 

在这个示例中,我们定义了一个链表节点结构体 ListNode 和一个包含链表节点的容器结构体 Container。我们创建了两个容器并将它们的链表节点连接起来。然后,我们使用 container_of 宏从链表节点获取容器结构体指针,并输出找到的容器的 ID 和数据。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!