Это действительно возможно?
Я знаю, как передавать двумерные массивы с помощью двойного указателя. И, насколько я понимаю, это должно быть и для трехмерных массивов. Но я бы хотел оказаться неправым. Этот вопрос наверняка покажет, как интерпретируются массивы.
Дело в том, что трехмерный массив - это непрерывный блок, а не какой-то массив указателей на более мелкие куски.
Эта программа выдаёт мне ошибку:
#include <iostream>
using namespace std;
void display(int ***arr, int l, int m, int n)
{
for(int i=0; i<l; i++)
for(int j=0; j<m; j++)
for(int k=0; k<n; k++)
cout << *(*(*(arr+i)+j)+k) << endl;
}
int main()
{
int arr[][2][2] = {{{1,2},{3,4}},{{10,20},{30,40}}};
display((int***)arr,2,2,2);
}
OUTPUT
test.cpp:17:19: error: cannot convert 'int (*)[2][2]' to 'int***' for argument '1' to 'void display(int***, int, int, int)'
display(arr,2,2,2);
^
2D-массивы переданы двойному указателю
Я верю, что могу сделать что-то похожее на 3D-массивы, но это слишком плохо для чтения
#include <iostream>
using namespace std;
void display(int **arr, int m, int n)
{
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
cout << *(*(arr+i)+j) << " " << arr[i][j] << endl;
}
int main()
{
int arr[][3] = {{1,2,3},{4,5,6}};
int *temp[2];
for(int i=0; i<2; i++)
temp[i] = *(arr+i);
display(temp,2,3);
}
OUTPUT
1 1
2 2
3 3
4 4
5 5
6 6