如果你想由数据成员地址获取对象首地址, 可能编写像下面的宏:
// FromMember宏// 功能:由数据成员地址获取对象首地址// 参数:class-对象类名// memberName-数据成员名称// pMember-数据成员地址#define FromMember(class,memberName,pMember) /
(class*)((char*)(pMember)-(char*)&(((class*)0)->memberName))
//下面的代码用于测试(VCNT):
struct Link{ Link *prev; Link *next; };struct ListNode{ int nID;
// other data member struct Link link;};
int main(int argc, char* argv[]){
struct ListNode node; node.nID = 100; struct Link *pmember = &node.link; struct ListNode* pNode = FromMember(struct ListNode, link, pmember ); printf("ID=%d /n", pNode->nID); return 0;}