Давайте сначала предположим, что 2D-массивы:
int x[2][2];
Тип x[0]
теперь равен , а не int*
, это int [2].Аналогично, &x[0]
относится не к типу int**
, а к int(*)[2]
.Вы, возможно, раньше не видели, что это указатель на массив из двух элементов.
Если теперь x
распадается на указатель, он распадается на точно такой же тип указателя (int(*)[2]
).
К сожалению, указатели на массивы различного размера несовместимы (int(*)[10]
не связан с int(*)[12]
- за исключением совместного использования одного и того же базового типа).Таким образом, вы не сможете разместить их в одном массиве, если не используете указатель void *.Но вы потеряете любую информацию о размерах массива, поэтому, скорее всего, это не тот путь.
Я лично рекомендовал бы структуру:
typedef struct
{
size_t rows;
size_t columns;
int* data;
} matrix;
В сочетании с некоторыми помощниками:
int get(matrix* m, int r, int c)
{
return m->data[m->columns * r + c];
}
// perhaps yet setter, constructing and destructing functions?
Структуры такого рода, которые вы можете легко поместить в массивы ...