Неважно, 1D, 2D или ND. Вы можете использовать две стратегии:
Первый - создать простой одномерный массив как
int *a = (int *)malloc(atoi(argv[1]) * atoi(argv[2]) * sizeof(int));
Второй - создать массив массивов, как показано ниже:
int len = atoi(argv[1]);
int len2 = atoi(argv[2]);
int **a = (int **)malloc(len * sizeof(int *));
for (int i = 0; i < len; ++i) {
a[i] = (int *)malloc(len2 * sizeof(int));
}
Первый вариант дает вам простой способ инициализации и удаления массива, второй вариант может позволить создать больший массив, потому что в этом случае фрагменты памяти для дочерних массивов могут быть зарезервированы в разных местах памяти.
Чтобы инициализировать его некоторым значением, используйте memset
.
Для 1D массива :
memset(a, 0, sizeof(int) * len * len2);
Для массива массивов :
for (int i = 0; i < len; ++i) {
memset(a[i], 0, sizeof(int) * len2);
}
P.S. Некоторые современные компиляторы позволяют инициализировать динамический массив как статический, но у этого кода могут возникнуть проблемы, когда вы попытаетесь скомпилировать его в другой среде.
P.P.S. Извините за мой английский, я надеюсь, что кто-то установит его на понятный человеку английский.