溫馨提示×

container_of宏在C語言中的應(yīng)用

小樊
81
2024-09-02 19:35:54
欄目: 編程語言

container_of 宏在 C 語言中通常用于從一個結(jié)構(gòu)體的成員指針獲取到整個結(jié)構(gòu)體的指針

container_of 宏的定義如下:

#define container_of(ptr, type, member) \
    ((type *)((char *)(ptr) - offsetof(type, member)))

這里,ptr 是指向結(jié)構(gòu)體成員的指針,type 是結(jié)構(gòu)體類型,member 是結(jié)構(gòu)體中成員的名稱。offsetof 函數(shù)用于計算成員在結(jié)構(gòu)體中的偏移量。

以下是一個使用 container_of 宏的示例:

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

typedef struct {
    int id;
    char name[20];
} Student;

int main() {
    Student student = {1, "Alice"};
    int *id_ptr = &student.id;

    // 使用 container_of 宏獲取 Student 結(jié)構(gòu)體的指針
    Student *student_ptr = container_of(id_ptr, Student, id);

    printf("Student ID: %d\n", student_ptr->id);
    printf("Student Name: %s\n", student_ptr->name);

    return 0;
}

在這個示例中,我們首先創(chuàng)建了一個 Student 結(jié)構(gòu)體變量 student,然后獲取了它的 id 成員的指針 id_ptr。接著,我們使用 container_of 宏從 id_ptr 獲取到整個 Student 結(jié)構(gòu)體的指針 student_ptr。最后,我們可以通過 student_ptr 訪問結(jié)構(gòu)體的其他成員。

0