用container_of宏解决链表问题

   2024-09-30 6570
核心提示:container_of 宏是一个用于在 Linux 内核中获取容器结构体指针的实用宏以下是一个简单的示例,说明如何使用 container_of 宏解决

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 和数据。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号