suigetsu
@suigetsu
ぬるぽちゃん

Как засунуть n — мерный массив в аргумент функции?

----------------------------------------------
  • Вопрос задан
  • 3434 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Ну вот, опять знатоки советуют добавить звёздочек и указателей на указатели ):

Все примеры дальше передают в функцию трёхмерный массив и присваивают v значение его элемента p[1][2][3].

Если функция принимает массив фиксированных размерностей, то прямо так можно и написать:
int f(int p[][20][30])
{
    int i = 1, j = 2, k = 3;
    int v = p[i][j][k];
}
...
int p[10][20][30];
f(p);

Первую размерность (самую старшую) можно опустить.

Если же нет, то перед вами следующий выбор:

- у вас старый стандарт С (до С99) -- передавайте указатель на самый первый элемент и значения размерностей. Внутри функции пересчитывайте набор индексов многомерного массива в линейный индекс:
int f(int *p, int n2, int n3) // p[][n2][n3]
{
    int i = 1, j= 2, k = 3;
    int v = p[(((i * n2) + j) * n3) + k]; // v = p[i][j][k];
}
...
int p[10][20][30];
f(&p[0][0][0], 20, 30);


- у вас С99 или новее: воспользуйтесь поддержкой языка:
int f(int n2, int n3, int p[][n2][n3])
{
    int i = 1, j = 2, k = 3;
    int v = p[i][j][k];
}
...
int p[10][20][30];
f(20, 30, p);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
но компилятор не проглатывает.

хихи

Указатель на указатель... и все пройдет.
Ответ написан
Комментировать
Как-то так:

int function(int [2][3][4][5]); // возможно не все размерности нужно указывать, точно не помню
или
int function(int ******); // количество звёздочек определяет цену коньяка количество измерений массива

Вообще, больше двух звёздочек нежелательно, можно запутаться.
Ответ написан
Комментировать
@mayorovp
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы