比如,吾開辟了一個共享記憶體區,把數組轉移成如下結構:
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