@rsatarov

Как задать размер массива через аргументы функции?

Допустим, имеется одномерный массив arr (как бы m*n элементов). В функцию передается он, а также длина и ширина создаваемого из него двумерного массива. В итоге что-то вроде этого:

int * foo(int * arr, int m, int n) {
    int tempArray[m][n];
    ...
    ...
}


Но не дает задавать так размеры ("m и n должны иметь константное значение). Как тогда это можно сделать?
  • Вопрос задан
  • 1854 просмотра
Пригласить эксперта
Ответы на вопрос 4
@res2001
Developer, ex-admin
Выделить память динамически:
int * tempArray = malloc(sizeof(int) * n * m);
Только потом не забывайте ее освобождать.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Но не дает задавать так размеры ("m и n должны иметь константное значение). Как тогда это можно сделать?

С99 позволяет. Используйте уже С99, 18 лет прошло с момента его принятия.
Связанный вопрос/ответ про передачу многомерного массива прямо через аргументы функции: Как засунуть n — мерный массив в аргумент функции?
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
В памяти массив все равно одномерный будет, хоть тресни ;) N-мерность нужна для удобства доступа.
Ответ написан
Комментировать
@Free_ze
Пишу комментарии в комментарии, а не в ответы
template<size_t N, size_t M>
int* foo () {
    int tempArray[ N ][ M ];
    //...
}

// use case
foo<2, 3>();


Конечно же вычисление должны быть в compile-time.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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