Предположим, что функция
void foo(int n, double x[])
сортирует n-вектор x
, выполняет некоторые операции с x
, а затем восстанавливает исходный порядок на x
перед возвратом. Итак, внутри foo
требуется какое-то временное хранилище, например, по крайней мере, n-вектор целых чисел, чтобы сохранить исходный порядок.
Как лучше всего справиться с этим временным хранилищем? Я могу придумать два очевидных подхода:
foo объявляет собственное рабочее пространство, объявляя внутренний массив, т.е. в верхней части foo
у нас есть
int temp [n];
в основной процедуре вызова динамически выделять n-вектор целых чисел один раз и передавать хранилище при каждом вызове версии foo
, которая принимает временное хранилище в качестве третьего аргумента, т. Е.
double * temp = malloc (n * sizeof (double));
foo (n, x, temp);
Меня беспокоит, что вариант 1 неэффективен (функция foo
будет вызываться много раз с тем же n
), а вариант 2 просто просто уродливо, так как мне приходится носить с собой это временное хранилище, чтобы оно всегда было доступно везде, где мне понадобится вызов foo (n, x)
.
Есть ли другие более элегантные варианты?