struct CStringData
{
long nRefs;    // reference count
int nDataLength;
int nAllocLength;
// TCHAR data[nAllocLength]

TCHAR* data()
{ return (TCHAR*)(this + 1); }
};

// Globals

int rgInitData[] = { -1, 0, 0, 0 };
CStringData* _atltmpDataNil = (CStringData*)&rgInitData;
LPCTSTR _atltmpPchNil = (LPCTSTR)(((BYTE*)&rgInitData) + sizeof(CStringData));

////////////////////////////////////////////////////////////////////////////////////
谁来解释下 最后俩行代码的意思。
&rgInitData   
(LPCTSTR)(((BYTE*)&rgInitData) + sizeof(CStringData))
这些 指针 是怎么 变化的???
谢谢

&rgInitData //取rgInitData 的地址

(LPCTSTR)(((BYTE*)&rgInitData) + sizeof(CStringData))
这个得分几步来讲
1、&rgInitData//取得一个地址,也就是指针
2、(BYTE*)&rgInitData//把取得的指针强制转换为BYTE类型的指针
3、sizeof(CStringData)//计算CStringData类型变量的所占的内存长度
4、((BYTE*)&rgInitData)+ sizeof(CStringData))//把步骤2强制转换得来的指针加上步骤3算出来的增量
5、由步骤4算得出一个新的指针,它指向了距离rgInitData后面sizeof(CStringData)的地方,现在把这个指针强制转换为LPCTSTR类型

有点难度哦