Инициализировать многомерный массив C с переменным размером до нуля
Я хочу инициализировать двумерный массив переменной величины до нуля.
Я знаю, что это можно сделать для массива фиксированного размера:
int myarray[10][10] = {0};
но он не работает, если я это сделаю:
int i = 10;
int j = 10;
int myarray[i][j] = {0};
Есть ли однострочный способ сделать это или мне нужно перебрать каждый элемент массива?
Спасибо
Ответы
Ответ 1
Вы не можете инициализировать его инициализатором, но вы можете memset()
массив равным 0.
#include <string.h>
int main(void) {
int a = 13, b = 42;
int m[a][b];
memset(m, 0, sizeof m);
return 0;
}
Примечание: это C99
. В C89
объявление m (int m[a][b];
) является ошибкой.
Ответ 2
Онлайн-стандарт C99 (проект n1256), раздел 6.7.8, абзац 3:
Тип инициализируемого объекта должен быть массивом неизвестного размера или тип объекта, который не является массивом переменной длины.
Акцент мой.
Как и все остальные, лучше всего использовать memset()
.
Ответ 3
Если вы указали указатель на свою структуру данных, вы можете попробовать memset.
Ответ 4
Вы не можете создать статический массив, используя непостоянные переменные.
Попробуйте использовать динамическое размещение:
int i = 10;
int j = 10;
size_t nbytes = i*j*sizeof(int);
int* myarray = (int*) malloc(nbytes);
memset(myarray,0,nbytes);
Ответ 5
Двумерные массивы с переменным размером не поддерживаются в C. Одно измерение (я не могу вспомнить, если оно первое или второе) должно быть исправлено. Я рекомендую прокручивать его после его определения.