由数据成员地址获取对象首地址

    技术2022-05-19  21

    如果你想由数据成员地址获取对象首地址, 可能编写像下面的宏:

    //   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;}


    最新回复(0)