c++ - 使用 union 标记在结构内引用 union 会给出错误的地址

标签 c++ nested structure unions

我需要在如下定义的结构中声明 union :

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

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

MyStruct m_myStruct;

char* pBuff = m_myStruct.theData::m_Buff;

这会编译,但会向 pBuff 返回一个指向 MyStruct 结构开头的指针,当我以为我正在写入 m_Buff 缓冲区时,这导致我覆盖了 m_DataType 和 m_DataLength 成员。

我正在使用 Visual Studio 2008。任何人都可以解释这种意外行为吗?谢谢。

最佳答案

你应该写:

char *pBuff = m_myStruct.m_Data.m_Buff;

我希望我知道它是如何按照编写的方式进行编译的。

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

相关文章:

c - C 中位域结构中的位域结构

c - 如何将结构从 Matlab 代码转换为 C 代码(使用 Matlab 编译器)

c++ - 如何使用 NTEventLogAppender?

c++ - 没有内联汇编的 x64 函数绕行

c++ - int * array = new int [size](); 的有效性

oracle - PL/SQL 中的嵌套游标

c++ - 在 mpi c++ visual 2010 中读写

php - 由于嵌套 SELECT,SQL 查询速度极慢。我怎样才能提高速度?

python - 在 Python 中嵌套 for

arrays - 显示结构数组的某些元素