我尝试使用vararg函数执行一个能够计算n个数的平均值的程序
average(int numberOfValues, ...);
条目是获取平均值的值的数量和值本身(...)。
问题是:我可以制定例程来从scanf获取这些值吗?我想构建一个numberOfValues大小的数组然后调用vararg函数,但是我不能为一个函数传递一个数组(至少没有指针)。我不在乎答案吗?我还想过将numberOfValues和值作为主函数参数传递(至少用于测试)来解决这个问题。
答案 0 :(得分:2)
你当然可以做类似
的事情int a, b, c;
scanf("%d%d%d", &a, &b, &c);
average(3, a, b, c);
或者
int a[3];
scanf("%d%d%d", &a[0], &a[1], &a[2]);
average(3, a[0], a[1], a[2]);
但是如果你不知道(直到用户输入它们)会有多少个值,那么是的,你可能想把它们存储在一个数组中,但不是,用于计算平均值的varargs函数是不会有用。
varargs函数的限制(至少是常规函数)是在编译时必须始终知道参数的数量(对于特定的调用)。
所以,相反,你可能想写
average(int numberOfValues, int theValues[])
{
/* ... */
}
将值作为数组传递,而不是作为变量参数列表传递。这可能更容易编写,更普遍有用。