所以,我已经知道如何解引用一个多维数组,像这样:
#include <tchar.h>
#include <iostream>
wchar_t g_pppwcSymbol[2][3][4];
int main(int argc, TCHAR **argv)
{
(* (*( (*(g_pppwcSymbol+1) )+2 )+3 ) ) = L'K';
std::wcout<<g_pppwcSymbol[1][2][3];
std::wcin.get();
return 0;
}
输出:K
然而,我也听说编译器将其转换为一维数组,这是正确的吗?这意味着所有的wchar_t元素在内存中都是一个接一个。所以一定有这样的方法:
***(g_pppwcSymbol + x) = value;
然而,我不确定这是如何工作的。有人能详细说明一下吗?
编辑:
到目前为止似乎还可以:
int main(int argc, TCHAR **argv)
{
/*(* (*( (*(g_pppwcSymbol+1) )+2 ) + 3)) = L'K';*/
/*std::wcout<<g_pppwcSymbol[1][2][3];*/
***(g_pppwcSymbol + 1) = L'K';
std::wcout<<g_pppwcSymbol[1][0][0];
std::wcin.get();
return 0;
}
输出:K
下编辑:工作模式:
static const int X = 2;
static const int Y = 3;
static const int Z = 4;
wchar_t g_pppwcSymbol[X][Y][Z];
int main(int argc, TCHAR **argv)
{
int iAccess = ((Y*Z) * 1) + ((Z) * 2) + 3;
*( (**g_pppwcSymbol) + iAccess) = L'K';
std::wcout<<g_pppwcSymbol[1][2][3];
std::wcin.get();
return 0;
}
输出:K
编译器实际上将[]
操作符转换为那些数学计算,因此您将以艰难的方式进行此操作…但这是一个有趣的练习,所以我会配合。
g_pppwcSymbol[2][3][4
]实际上是一个2元素的3元素的大数组。因此,
g_pppwcSymbol + ((3 * 4) /* size of first level array element */ * 1) + (4 /* size of second level array element */ * 2) + 1 /* size of third level array element */ * 3;
应该给出最后一个数组的最后一个数组的最后一项的位置。只要每个元素是1字节大
数组只是一个大小为"element_count
* element_size
"的内存区域,[]
运算符将数组位置作为指针并加上element_size
* index
。它可以包含其他数组,因为它可以像其他内存结构一样计算它们的大小。
顺便说一句,我相信你会在网上找到很多关于这个的详细文档。