C語言中的container_of宏的作用是根據結構體中某個成員的指針來獲取整個結構體的指針。它的定義如下:
#define container_of(ptr, type, member) \
((type *)((char *)(ptr) - offsetof(type, member)))
在這個宏中,ptr
是某個結構體成員的指針,type
是結構體的類型,member
是結構體中的成員名。
container_of宏的實現原理是通過將成員指針的地址減去該成員在結構體中的偏移量,從而得到整個結構體的指針。這樣,我們就可以通過這個指針來訪問結構體中的其他成員。
container_of宏通常用于在實現一些數據結構時,將結構體中的某個成員與其他數據結構關聯起來。這樣可以方便地在需要時獲取整個結構體的指針,并進行相應的操作。