пробел - это действительно память, выделенная для всей матрицы.
Однако он продолжает создавать указатели на области, расположенные в пространстве с помощью
Arr3D = malloc(Z_DIM * sizeof(char **));
Цель Arr3D - просто способ получить доступ к пространству посредством индексации (указав индексы Z, Y, X). Пространство имеет только один индекс, поэтому, если вы хотите получить доступ к матричному элементу [a][b][c]
через пробел, вам нужно преобразовать его в один space[d]
, где d - что-то вроде a*Y_DIM*Z_DIM + b*Z_DIM+c
. Таким образом, с Arr3D вы можете получить доступ от [a][b][c]
до Arr3D[a][b][c]
.
Arr3D
сам по себе является массивом char**
, которые являются указателями на указатели типа char.
Arr3D[z]
- это указатель на массив указателей на символы. Затем каждый Arr3D[z][y]
устанавливается для указания на конкретную строку в исходной матрице 3x3 с помощью
Arr3D[z][y] = space + (z*(X_DIM * Y_DIM) + y*X_DIM);
Итак, с помощью Arr[1][2]
вы получаете доступ к строке с z=1, y=2
матрицы.