首页 > 解决方案 > 将参数传递给 C 中的可变参数函数

问题描述

我用 C 写了这个简单的可变参数函数:

double averageVar(int cnt, ...)
{
    va_list args;
    va_start(args, cnt);

    int i;
    double res = 0;
    for (i = 0; i < cnt; i++)
    {
        res += va_arg(args, double);
    }
    res /= cnt;
    va_end(args);

    return res;
}

当我这样使用它时:

averageVar(2, 4.0, 7.88);

它工作正常,但以这种方式调用它:

averageVar(2, 4, 7.88);

产生一些乱码,即:-0.000000。似乎我必须传递整数值,后跟 .0。这是为什么?

标签: c

解决方案


averageVar(2, 4, 7.88);第二个参数int不是double。您需要传递正确的类型参数或强制转换

double averageVar(int cnt, ...)
{
    va_list args;
    va_start(args, cnt);

    int i;
    double res = 0;
    for (i = 0; i < cnt; i++)
    {
        res += va_arg(args, double);
    }
    res /= cnt;
    va_end(args);

    return res;
}

int main(void)
{
    printf("%f\n", averageVar(2, 4.0, 7.88));
    printf("%f\n", averageVar(2, (double)4, 7.88));

    printf("%f\n", averageVar(2, 4, 7.88)); //wrong parameter type
}

通常为常数值:

4 - 整数类型

4.0f - 浮动类型

4.0 - 双类型


推荐阅读