struct node { //链表结构体
struct node prev;
struct node next;
};
链表结构关系图:
#define container_of(ptr, type, member) ((type *)((char *)(ptr)-(unsigned int)(&((type *)0)->member))) //C语言实现宏container_of
struct node *head = (1)的地址; //指向链表的头
strcut unit* cont_addr = NULL; //将得到链表中的内容
cont_addr = container_of(head, strcut unit, list);//list是结构体struct unit的成员变量; head是指向struct unit类型的链表头
cont_addr = ((strcut unit *) ((char *)(head) - (unsigned int)(&((strcut unit *)0)->list)))//展开宏得到,参考链表上图
(3) 强制转换 (1)地址0x12345678 (2)奇妙的得到偏移16