Передача многомерных массивов как аргументы функции в C

В C я могу передать многомерный массив функции как отдельный аргумент, когда я не знаю то, чем будут размеры массива?

Кроме того, мой многомерный массив может содержать типы кроме строк.

51
задан David 6 August 2008 в 11:20
поделиться

1 ответ

Передайте явный указатель на первый элемент с размерами массива в качестве отдельных параметров. Например, для обработки двумерных массивов произвольного размера типа int:

void func_2d(int *p, size_t M, size_t N)
{
  size_t i, j;
  ...
  p[i*N+j] = ...;
}

, который будет называться

...
int arr1[10][20];
int arr2[5][80];
...
func_2d(&arr1[0][0], 10, 20);
func_2d(&arr2[0][0], 5, 80);

Тот же принцип применяется для массивов более высокого измерения:

func_3d(int *p, size_t X, size_t Y, size_t Z)
{
  size_t i, j, k;
  ...
  p[i*Y*Z+j*Z+k] = ...;
  ...
}
...
arr2[10][20][30];
...
func_3d(&arr[0][0][0], 10, 20, 30);
31
ответ дан 7 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: