Итак, я выяснил, как разыменовать многомерный массив, например так:
#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;
Однако я не уверен, как именно это работает. Может кто-нибудь уточнить?
EDIT:
похоже, это работает до сих пор:
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