这个宏的在对链表进行操作,可以用如下图形表示:
这个宏的意思就是根据链表的地址转化为结构体的地址,以取得结构体中的数据。
其中listnode指链表结构,可以如下定义:
typedef struct _listnode {
struct _listnode *prev;
struct _listnode *next;
} listnode;
node包含链表,
typedef struct _node {
listnode list;
int data;
} node;
含有数据data,数据可以是任意类型。
#include <stdio.h>
#include <stddef.h>
// listnode类型的声明,里面只有两个指针prev,next
typedef struct _listnode {
struct _listnode *prev;
struct _listnode *next;
} listnode;
// 使用listnode时最关键的宏
#define node_to_item(node, container, member) \
(container *) (((char*) (node)) - offsetof(container, member))
//