Как мне работать с динамическими многомерными массивами на 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
Как мне работать с динамическими многомерными массивами на C?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.