Я пишу простую тестовую программу для передачи многомерных массивов. Я изо всех сил пытаюсь получить подпись функции вызываемого.Помогите с передачей многомерных массивов
код у меня есть:
void p(int (*s)[100], int n) { ... }
...
{
int s1[10][100], s2[10][1000];
p(s1, 100);
}
Этот код, кажется, работает, но это не то, что я намеревался. Я хочу, чтобы функция p не обращала внимания, имеет ли диапазон значений 100 или 1000, но должен знать, что существует 10 указателей (с использованием сигнатуры функции).
В качестве первой попытки:
void p(int (*s)[10], int n) // n = # elements in the range of the array
и как второй:
void p(int **s, int n) // n = # of elements in the range of the array
Но без толку я могу показаться, чтобы получить их, чтобы работать правильно. Я не хочу жестко кодировать 100 или 1000 в подписи, но вместо этого передаю его, имея в виду, что всегда будет 10 массивов.
Очевидно, что я хочу, чтобы избежать необходимости объявить функцию:
void p(int *s1, int *s2, int *s3, ..., int *s10, int n)
FYI, я смотрю на ответы на a similar question, но до сих пор путают.
Альтернативно, void p (int s [] [10], int n) ' – outis
@outis: Совершенно верно. Я использовал 'int (* s) [10]' отчасти потому, что я подражал оригинальному вопросу, а также потому, что лично я предпочитаю избегать объявлений аргументов типа 'int s [] [10]', поскольку они вводят читателя в заблуждение относительно того, что на самом деле передается функции. –
Спасибо Дэйл. Это похоже на правильный метод для обеспечения того, что я изначально хотел. Единственная проблема заключается в том, что транспонированная структура препятствует моему коду. Похоже, что другой ответ, который предполагает динамическое построение многомерного массива, и переход в диапазон будет более удобным и понятным для понимания. – snap