Передача статического трехмерного массива C99 с переменной длиной в функцию - PullRequest
0 голосов
/ 20 мая 2018

Я изо всех сил пытаюсь передать статический трехмерный массив C99 переменной длины в функцию.Я знаю, что это было задано здесь на SO раньше, но я пробовал каждое решение, которое нашел, но ни одно из них не сработало.У меня есть следующий код:

int N;

int foo( ? ){

  // do stuff 

}

int main(){

   cin >> N;
   int arr[N][N][N];

   foo(arr);

return 0;
}

Вопрос в том, что поставить вместо '?'.Среди прочего я попытался создать указатель на этот трехмерный массив и передать указатель в соответствии с ответом здесь , но это также скомпилирует.

1 Ответ

0 голосов
/ 20 мая 2018

C ++ не имеет массивов в стиле переменных.Что вы можете сделать, это привести адрес массива к указателю и передать измерения или даже привести к указателю на массив того же размера, но другой формы, а затем разыменовать этот указатель.

Один C ++Техника, которую вы можете использовать, чтобы придать ей сахар, если вы выбираете конечное число возможных форм, это объявить template< size_t L, size_t M, size_t N> int foo( int arr[L][M][N]).Другим будет класс многомерного массива, который оборачивает ваш массив и его измерения.Затем вы можете создать объект, который будет псевдонимом, а не копировать массив, который вы можете индексировать как arr(i, j, k).

...