Есть ли способ передать двумерный массив функции, что размер определяется входом, как следующее:Передача двухмерного массива в функцию
scanf("%d",&n);
matrix[n][n];
?
Я не хочу использовать определение для второго параметра функции.
Есть ли способ передать двумерный массив функции, что размер определяется входом, как следующее:Передача двухмерного массива в функцию
scanf("%d",&n);
matrix[n][n];
?
Я не хочу использовать определение для второго параметра функции.
Использование variable length array особенность C99. Затем передайте его функции в соответствии с аргументом функции с ее размером.
В C 1999 реализации и в C 2011 реализации, которые поддерживают массивы переменной длины, вы можете передать массив с вводного измерения времени, объявив функцию таким образом:
ReturnType foo(size_t n, ElementType matrix[][n]) …
В вызывающем коде, после получения n
, вы можете определить матрицу с:
ElementType matrix[n][n];
и вы можете вызвать функцию с:
Примечания:
ReturnType
и ElementType
заполнители для типов вы выбираете. ReturnType
может быть void
.size_t
, вам необходимо #include <stddef.h>
.-std=c99
или -std=c11
. Дополнительную информацию см. В разделе GCC documentation.Если массив велик, вы можете определить его таким образом, вместо того, чтобы:
ElementType (*matrix)[n] = malloc(n * sizeof *matrix);
if (!matrix)
Handle error.
А потом вы должны освободить его:
free(matrix);
Если ваша реализация C не поддерживает переменную -length, тогда вы можете выделить место для n*n
элементов и проиндексировать массив вручную (элемент в строке i
и столбец j
будет находиться в позиции i*n+j
), возможно, написав некоторые вспомогательные функции, которые помогут в индексировании. В этом случае вы передадите массив функции как простой указатель на тип элемента, а не указатель на массив элементов.
Если вы покажете нам объявление функции, нам будет легко рассказать вам, как передать 2D-массив вашей функции. – haccks