如何正确解引用没有[]操作符的多维数组



所以,我已经知道如何解引用一个多维数组,像这样:

#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。它可以包含其他数组,因为它可以像其他内存结构一样计算它们的大小。

顺便说一句,我相信你会在网上找到很多关于这个的详细文档。

相关内容

  • 没有找到相关文章

最新更新