亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

如何用container_of宏實現類型轉換

小樊
83
2024-09-02 19:42:57
欄目: 編程語言

container_of 是一個宏,用于在 Linux 內核和其他 C 語言項目中實現類型轉換

以下是 container_of 宏的定義:

#define container_of(ptr, type, member) ({ \
    const typeof(((type *)0)->member) *__mptr = (ptr); \
    (type *)((char *)__mptr - offsetof(type, member)); })

這個宏接受三個參數:

  1. ptr:指向成員變量的指針。
  2. type:包含成員變量的結構體或聯合體的類型。
  3. member:結構體或聯合體中成員變量的名稱。

宏的工作原理如下:

  1. 首先,它計算出給定成員在其所屬結構體或聯合體中的偏移量。這是通過 offsetof(type, member) 函數實現的,它返回成員在類型中的字節偏移量。
  2. 然后,它將給定的成員指針減去該偏移量,得到結構體或聯合體的起始地址。
  3. 最后,它將計算出的地址強制轉換為目標類型的指針。

以下是一個使用 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 宏將 int 指針轉換為 Student 指針
    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;
}

在這個示例中,我們有一個 Student 結構體,包含 idname 兩個成員。我們創建了一個 Student 實例,并獲取了 id 成員的指針。然后,我們使用 container_of 宏將 int 指針轉換為 Student 指針,以便訪問整個結構體的成員。

0
孟津县| 石屏县| 望城县| 兴安县| 潮安县| 盐城市| 科技| 清远市| 濮阳县| 台安县| 河源市| 巨鹿县| 昌都县| 维西| 内黄县| 九龙县| 视频| 丽水市| 伊川县| 定结县| 阿合奇县| 三门峡市| 屯昌县| 若尔盖县| 海兴县| 海淀区| 盐池县| 清远市| 阳江市| 临漳县| 合江县| 安丘市| 诸暨市| 县级市| 扬中市| 阳西县| 曲沃县| 洪湖市| 禄丰县| 石楼县| 福安市|