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

发布于 2024-11-07 02:51:20 字数 522 浏览 0 评论 0原文

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

There's a function avg(int, ...) which calculates the average number of input integers,

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

Now I have an array of integers that need to use avg() to get their average value,
but the array's size is dynamic, maybe read from stdin or from a file.

Code example:

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],....)  

Note that the avg() function should be called only once.

-- EDITED --
The avg() function is just an example, the real function is more complex than that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

热鲨 2024-11-14 02:51:20

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

There's no portable way to do this. Most of the time when a varargs function exists, there is also a variant which directly accepts an array parameter instead.

メ斷腸人バ 2024-11-14 02:51:20

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

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

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

Just pass the p and the number of elements that p can point to.

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

In the function, have a loop that iterates 0 to count-1 and in which sum of all the elements can be computed. After the loop, just return sum/count which is the average.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文