container_of
宏是一個用于獲取結構體實例的指針,通過其成員變量的指針
在 C 語言中,container_of
宏的定義如下:
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
這里的 ptr
是成員變量的指針,type
是結構體類型,member
是結構體中成員變量的名稱。offsetof
是一個宏,用于計算結構體中成員變量的偏移量。
container_of
宏的工作原理如下:
這種方法可以用于遍歷鏈表、樹等數據結構,因為這些數據結構通常使用指針連接各個節點。通過 container_of
宏,我們可以從節點中的某個成員變量的指針獲取到節點的指針,從而訪問節點的其他成員變量和相關操作。
總之,container_of
宏與指針運算密切相關,它提供了一種方便的方式來獲取結構體實例的指針,從而簡化了對結構體成員變量的訪問和操作。