Передать многомерный массив с переменным размером в качестве аргумента функции

avatar
Daniel
9 августа 2021 в 02:04
40
1
0

У меня есть этот код:

int m, n;
cin>>m>>n;
double A[m][n];
//read values for A

Как я могу передать A в функцию?

Источник

Ответы (1)

avatar
dbush
9 августа 2021 в 02:14
2

Массивы переменной длины являются функцией C и не поддерживаются в стандартном C++. Однако некоторые компиляторы, такие как gcc, поддерживают его как расширение.

В тех компиляторах, которые его поддерживают, вам нужно будет передать размеры массива в качестве параметров и использовать эти параметры в качестве размера массива:

void handle_array(int m, int n, double A[m][n])
{
    ...
}

Обратите внимание, что это требуется только для многомерного массива, а не для первого измерения. Вы также можете передать его следующим образом:

void handle_array(int m, int n, double A[][n])
{
    ...
}

Или эквивалентно:

void handle_array(int m, int n, double (*A)[n])
{
    ...
}
sweenish
9 августа 2021 в 02:27
0

Я чувствую, что это упускает некоторую информацию, например, что m — единственное измерение, которое нужно передавать отдельно, и что n нужно указывать при записи параметра массива, но не m . Что еще более важно, он исключает более идиоматический подход C++, который не зависит от расширения компилятора.

dbush
9 августа 2021 в 02:35
0

@sweenish Да, добавил это.