Как мне работать с динамическими многомерными массивами на C?

При динамическом размещении c с использованием malloc:

int** x;

x = malloc(dimension1_max * sizeof(*x));
for (int i = 0; i < dimension1_max; i++) {
  x[i] = malloc(dimension2_max * sizeof(x[0]));
}

//Writing values
x[0..(dimension1_max-1)][0..(dimension2_max-1)] = Value; 
[...]

for (int i = 0; i < dimension1_max; i++) {
  free(x[i]);
}
free(x);

Это string-array выделяет 2D-массив размером dynamic dimension1_max * dimension2_max. Так, например, если dynamic вам нужен массив 640 * 480 character-arrays (fe пикселей изображения), используйте character-arrays dimension1_max = 640, dimension2_max = 480. Затем вы char-array можете получить доступ к static-array массиву, используя x[d1][d2], где static-array d1 = 0 ..639, d2 = 0..479.

Но sub-arrays поиск в SO или Google также sub-arrays открывает другие возможности, например sub-arrays in this SO question

Обратите внимание, что ваш array-of-objects массив не будет выделять dynamic непрерывную область памяти array (640 * 480 байт) в этом случае, что bytearray может вызвать проблемы с static-array функциями, которые предполагают arrays это. Итак, чтобы массив удовлетворял sub-arrays условию, замените приведенный string-array выше блок malloc следующим string-array образом:

int** x;
int* temp;

x = malloc(dimension1_max * sizeof(*x));
temp = malloc(dimension1_max * dimension2_max * sizeof(x[0]));
for (int i = 0; i < dimension1_max; i++) {
  x[i] = temp + (i * dimension2_max);
}

[...]

free(temp);
free(x);

c

arrays

dynamic

2022-10-03T21:00:35+00:00
Вопросы с похожей тематикой, как у вопроса:

Как мне работать с динамическими многомерными массивами на C?