只有脚踩上去才知其远近和曲折

存储任意类型的链表

存储任意类型的链表

“`c++
#ifdef __compiler_offsetof
#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
#else
#define offsetof(TYOE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER) //返回成员的地址 和偏移量相似
#endif

#define container_of(ptr, typr, member) ({
const typeof( ((type *)0)->member) *_mptr = (ptr); //type类型 0值空地址 member 把某个字段的地址赋值给相应的指针类型
(type *)( (char *)__mptr – offsetof(typr, member)); //mptr指向list位置地址 得到相关变量的首地址
})

struct head_list {
struct head_lsit *next;
struct head_lsit *prev;
}

struct test_struct {
int num;
char ch;
float fl;
strcut head_list list;
}

struct test_struct2 {
int dobule;
strcut head_list list;
}

//test_struct 与 test_struct2 可以在一个链表中
“`

一个程序要完成某些操作要存储某些必要的信息

点赞