关于MFC中CString实现的有关问题

关于MFC中CString实现的问题
.h中:
C/C++ code

struct CStringData
{
    long nRefs; // 引用记数
    int nDataLength; // 字符使用长度
    int nAllocLength; // 分配长度
    // 存放字符串的地方, this+1 相当与是CStringData[1], 所以TCHAR* data()指的是CStringData[1]的地址
    TCHAR* data() 
    { 
        return (TCHAR*)(this+1); 
    } 
};



.cpp开头有类似这么几句:
C/C++ code

int g_InitData[] = { -1, 0, 0, 0 };
CStringData* g_Data = (CStringData*)&g_InitData;
LPCTSTR g_pCStr = (LPCTSTR)(((BYTE*)&g_InitData)+sizeof(CStringData));



请问LPCTSTR g_pCStr = (LPCTSTR)(((BYTE*)&g_InitData)+sizeof(CStringData));这一句具体是怎么个转化法?

------解决方案--------------------
LPCTSTR g_pCStr = (LPCTSTR)(((BYTE*)&g_InitData)+sizeof(CStringData));
// sizeof(CStringData)实际就是获取CStringData结构体的大小
//&g_InitData获取了g_InitData数组的首地址,然后将其转换为BYTE类型。
//实际上g_pCStr指针指向了g_InitData数组的首地址到sizeof(CStringData)大小的区域
------解决方案--------------------
帮顶贴,虽然我不懂。。。
------解决方案--------------------
相当于

C/C++ code
int g_InitData[] = { -1, 0, 0, 0 };
CStringData* g_Data = (CStringData*)&g_InitData;
LPCTSTR g_pCStr = (LPCTSTR)g_Data.data();

------解决方案--------------------
探讨

谢谢各位!还有一点不明白:
原句说:“this+1 相当与是CStringData[1], 所以TCHAR* data()指的是CStringData[1]的地址”
应该不是这样的吧?
this+1只是CStringData结构指针偏移sizeof(CStringData)之后的内存地址吧???

------解决方案--------------------
&CStringData[1] = this + 1

换成这样你可能会好理解点

C/C++ code

   int arr[10];
   int *p = arr;

   char *pData1 = (char*)(p + 1);
   char *pData2 = (char*)((BYTE*)p + sizeof(int));
   char *pData3 = &arr[1];

------解决方案--------------------
C/C++ code

struct
{
    int n;
    char arr[n]
}