我需要在如下定义的结构内声明一个联合:

struct MyStruct
{
    int    m_DataType;
    DWORD  m_DataLen;
    union theData
    {
        char    m_Buff [_MAX_PATH];
        struct MyData m_myData;
    } m_Data;
};


最初,我尝试按如下方式访问联合数据(在添加m_Data声明之前):

MyStruct m_myStruct;

char* pBuff = m_myStruct.theData::m_Buff;


这将进行编译,但是将指向MyStruct结构开头的指针返回给pBuff,这使我以为我正在写入m_Buff缓冲区时覆盖了m_DataType和m_DataLength成员。

我正在使用Visual Studio2008。有人可以解释这种意外行为吗?谢谢。

最佳答案

您应该在写:

char *pBuff = m_myStruct.m_Data.m_Buff;


我希望我知道它是如何编写的。

关于c++ - 使用并集标记引用结构内部的并集会提供错误的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2626808/

10-11 01:57