溫馨提示×

container_of宏的作用是什么

小樊
94
2024-09-02 19:33:55
欄目: 編程語言

container_of 宏在 C 語言中通常用于獲取結構體的起始地址,給定其成員變量的指針

這個宏的主要作用是在遍歷鏈表、樹等數據結構時,根據某個成員變量的指針回溯到其所屬的結構體。例如,在遍歷一個雙向鏈表時,我們可以使用 container_of 宏從鏈表節點的指針獲取到包含該節點的結構體實例。

下面是一個簡單的示例:

#include<stdio.h>
#include <stddef.h>

typedef struct {
    int data;
    struct list_head list;
} my_data_t;

// 假設已經定義了 list_head 結構體和相關操作函數

int main() {
    my_data_t node1 = { .data = 1 };
    my_data_t node2 = { .data = 2 };

    // 假設已經將 node1 和 node2 添加到鏈表中

    struct list_head *cur;
    // 遍歷鏈表
    list_for_each(cur, &head) {
        // 使用 container_of 宏獲取 my_data_t 結構體實例的指針
        my_data_t *entry = container_of(cur, my_data_t, list);
        printf("Data: %d\n", entry->data);
    }

    return 0;
}

在這個示例中,我們使用 container_of 宏從鏈表節點的指針獲取到包含該節點的 my_data_t 結構體實例。這樣我們就可以訪問和操作結構體中的其他成員變量。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女