由數據成員地址獲取對象首地址

如果你想由數據成員地址獲取對象首地址, 可能編寫像下面的宏:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章