关于MFC中CString实现的有关问题
关于MFC中CString实现的问题
.h中:
.cpp开头有类似这么几句:
请问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)大小的区域
------解决方案--------------------
帮顶贴,虽然我不懂。。。
------解决方案--------------------
相当于
.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();
------解决方案--------------------
------解决方案--------------------
&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] }