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