如何将变量参数传递给接受变量参数的函数?

时间:2011-05-13 01:53:03

标签: c variadic-functions

有一个函数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 个答案:

答案 0 :(得分:4)

没有可移植的方式来做到这一点。大多数情况下,当存在varargs函数时,也会有一个直接接受数组参数的变体。

答案 1 :(得分:0)

只需传递p以及p可指向的元素数量。

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

在函数中,有一个迭代 0到count-1 的循环,并且可以计算所有元素的总和。循环之后,只需返回sum/count即平均值。

相关问题