Другая возможность состоит в том, чтобы использовать одномерный массив как двухмерной один, как в следующем примере:
#include <stdio.h>
#include <stdlib.h>
#define N 2
#define M 3
/*
array has N * M elemts:
| N | N | N |
v v v v
|----|----|----|----|----|----|
array[i][j] == array[i*N + j]
*/
#define GET(i,j) (i*N + j)
int main(int argc, char **argv) {
int *array;
int i, j;
array = malloc(N * M *sizeof(int));
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
array[i*N + j] = i+j;
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
printf("array[%d][%d] = %d\n", i, j, array[i*N + j]);
printf("Using the macro:\n");
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
printf("array[%d][%d] = %d\n", i, j, array[GET(i,j)]);
free(array);
return 0;
}
Я также определил макрос GET(i,j)
так, что код будет больше на самом деле это действительно необходимо только для обработки более сложных случаев, чем двухмерных.
Умножьте 'M * N * sizeof (int)' и сделайте 'malloc' для такого блока памяти. M и N - количество элементов в каждом измерении. – i486