如何正确使用可变参数函数

时间:2014-11-15 07:08:26

标签: c

我写了以下代码:

#include <stdarg.h>
#include <stdio.h>

double average(int count, ...)
{
    va_list ap;
    int j;
    double sum = 0;

    va_start(ap, count); /* Requires the last fixed parameter (to get the address) */
    for (j = 0; j < count; j++) {
        sum += va_arg(ap, double); /* Increments ap to the next argument. */
    }
    va_end(ap);

    return sum / count;
}

int main(){
  int count = 3;
  double result = average(count, 10, 20, 20);
  printf("result = %f\n", result);
}

我的意图是计算参数总和的平均值(第一个参数除外,它是参数的数量)。但打印值为0.00000。代码有什么问题?

2 个答案:

答案 0 :(得分:5)

您正在尝试将int作为double阅读,但这不起作用。 cast并将arg作为int

sum += (double) va_arg (ap, int);   /* Increments ap to the next argument. */

<强>输出:

result = 16.666667

答案 1 :(得分:4)

您没有将double传递给该函数。尝试

  double result = average(count, 10.0, 20.0, 20.0);