Как передать переменные параметры в функцию, которая принимает переменные параметры? - PullRequest
2 голосов
/ 13 мая 2011

Есть функция avg(int, ...), которая вычисляет среднее количество входных целых чисел,

avg(1,2,3) = 2, avg(2,3,4,5,6) = 4  

Теперь у меня есть массив целых чисел, которые нужно использовать avg(), чтобы получить их среднее значение,
но размер массива динамический, может быть прочитан из stdin или из файла.

Пример кода:

int i, num;  
scanf("%d", &num);  
int *p = malloc(num * sizeof(int));  
for(i = 0; i < num; ++i)  
    scanf("%d", &p[i]);  
// what should I do now?  
// avg(p[0], p[1],....)  

Обратите внимание, что функцию avg() следует вызывать только один раз.

- отредактировано -
Функция avg () является лишь примером, действительная функция более сложна, чем эта.

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Нет портативного способа сделать это.В большинстве случаев, когда существует функция varargs, существует также вариант, который напрямую принимает параметр массива.

0 голосов
/ 13 мая 2011

Просто передайте p и количество элементов, на которые может указывать p.

float computeAverage( int *p, int count ) ; // count being `num` in this case.

В функции есть цикл, который повторяет 0 до count-1 и в котором сумма всех элементов может быть вычислена.После цикла просто верните sum/count, что является средним значением.

...