2011-05-13 220 views
2

有一个功能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()函数只是一个例子,实函数比这个更复杂。

回答

0

只要通过pp可以指向的元素的数量即可。

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

在功能方面,有一个循环迭代访问0计数-1且其中的所有元素的总和,可以计算。循环后,只需返回sum/count这是平均值。

+0

感谢您的快速回复。实际上,这只是一个示例函数,实际问题更加复杂,我必须使用预定义的函数,而不是创建自己的实现。 – tfengjun 2011-05-13 02:04:14

+1

@tfengjun - @davmac建议除了传递指针之外,没有任何便携的方法可以做到这一点。祝你好运。 – Mahesh 2011-05-13 02:05:45

+0

你能给我一个关于如何以*非便携*的方式处理它的提示吗?因为我的代码只能在Linux x86上运行。 – tfengjun 2011-05-13 02:12:12

4

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

+0

的确有一个可变参数函数,但没有一个接受一个数组。我在Linux下的x86上做这个,有没有什么窍门可以解决这个问题? – tfengjun 2011-05-13 02:07:30

+0

您可以使用gcc的__builtin_apply()函数(检查gcc文档),但它需要知道ARGUMENTS数据的格式(没有记录,并且依赖于平台)。 – davmac 2011-05-14 04:15:21

相关问题