#include <iostream>
#define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define ICONTAINEROF(ptr, type, member) ((type*)(((char*)((type*)ptr)) - IOFFSETOF(type, member)) )
#define IQUEUE_ENTRY(ptr, type, member) ICONTAINEROF(ptr, type, member)
using namespace std; int main(){ struct Demo{ char sex; int id; }; struct Demo dd = {'0',666}; cout << "&dd : " << &dd << endl; cout << "IQUEUE_ENTRY(&dd,Demo,sex) : " << IQUEUE_ENTRY(&dd.sex,Demo,sex) << endl; cout << "IQUEUE_ENTRY(&dd,Demo,id) : " << IQUEUE_ENTRY(&dd.id ,Demo, id) << endl; return 0; }
输出:
IQUEUE_ENTRY作用:根据结构体的某个数据成员,输出结构体的起始地址。
#define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
IOFFSETOF:解析参考https://www.cnblogs.com/iuyy/p/13391851.html