天天看點

C中取得數組的位址,指派給數組結構的字段

  比如,吾開辟了一個共享記憶體區,把數組轉移成如下結構:

typedef struct
{
    int shmID;
    bool hasData;
    int dataSize;
    char* dataBuffer;
}  JsData;      

有兩種辦法:

  • 計算位置
JsData* pData = (JsData*)m_nShmAddr;
pData->dataBuffer = (char*)m_nShmAddr+sizeof(int)+sizeof(bool)+sizeof(int);      
  • 直接取位址(會錯誤)
pData->dataBuffer = (char*)(&(pData->dataBuffer));      

這個代碼的意思是,取dataBuffer的位址,同仁給dataBuffer。

兩種辦法是不是等效?不等效,因為有位元組對齊的問題(pack)。輸出結果如下:

0xA7E38009
0xA7E38010      

繼續閱讀