suigetsu
@suigetsu
ぬるぽちゃん

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

----------------------------------------------
  • Вопрос задан
  • 3262 просмотра
Решения вопроса 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 ******); // количество звёздочек определяет цену коньяка количество измерений массива

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

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

Войти через центр авторизации
Похожие вопросы
АМИКОН Москва
от 120 000 до 200 000 ₽
Almalence, Inc. Новосибирск
от 2 000 до 2 500 $
4Taps Mobile Тольятти
от 120 000 до 190 000 ₽
06 дек. 2020, в 01:44
500 руб./за проект
06 дек. 2020, в 00:33
700 руб./за проект
06 дек. 2020, в 00:08
5000 руб./за проект