Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将参数传递给变量函数_C - Fatal编程技术网

在C语言中将参数传递给变量函数

在C语言中将参数传递给变量函数,c,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); retu

我用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, 7.88);
产生一些胡言乱语,即:-0.000000。似乎我必须传递整数值,后跟.0。为什么会这样?

平均风险值(2,4,7.88)第二个参数是
int
not
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
}
double averageVar(int cnt,…)
{
va_列表参数;
va_启动(args,cnt);
int i;
双res=0;
对于(i=0;i
通常为常量值:

4
-整数类型

4.0f
-浮动类型

4.0
-双类型
averageVar(2,4,7.88)
第二个参数是
int
not
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
}
double averageVar(int cnt,…)
{
va_列表参数;
va_启动(args,cnt);
int i;
双res=0;
对于(i=0;i
通常为常量值:

4
-整数类型

4.0f
-浮动类型


4.0
-双重类型

什么是
4
?可以用
va_arg(args,double)
处理该类型吗?您本质上是在问为什么
printf(“%lf”,4)
不起作用。您的函数需要
参数。在普通类型升级之后,必须提供与该类型匹配的参数。提供一个整数是在欺骗你自己的函数。
averageVar(2,4.0,7.88)
averageVar(2,(双)4,7.88)工作什么是
4
?可以用
va_arg(args,double)
处理该类型吗?您本质上是在问为什么
printf(“%lf”,4)
不起作用。您的函数需要
参数。在普通类型升级之后,必须提供与该类型匹配的参数。提供一个整数是在欺骗你自己的函数。
averageVar(2,4.0,7.88)
averageVar(2,(双)4,7.88)works
4.0f
无论如何都将升级为
double
promotions@M.M事实上-只是想显示数值常量,由于默认参数,格式
4.0f
将升级为
double
promotions@M.M事实上-只是想显示数值常量格式