【发布时间】:2021-02-03 10:42:49
【问题描述】:
我用 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。这是为什么呢?
【问题讨论】:
-
什么是
4?可以使用va_arg(args, double)处理该类型吗? -
您实际上是在问为什么
printf("%lf", 4)不起作用。 -
您的函数需要
double参数。在通用类型提升后,您必须提供与该类型匹配的参数。提供一个整数就是在欺骗你自己的函数。 -
averageVar(2, 4.0, 7.88);或averageVar(2, (double)4, 7.88);有效
标签: c