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);
return res;
}
当我这样使用它时:
averageVar(2, 4.0, 7.88);
它工作正常,但以这种方式调用它:
averageVar(2, 4, 7.88);
产生一些乱码,即:-0.000000。似乎我必须传递整数值,后跟 .0。这是为什么?
解决方案
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
- 双类型
推荐阅读
- c# - PostAsync 执行后立即从继承的地方返回
- excel - Excel VBA - 验证列中的电子邮件地址并复制到剪贴板
- javascript - 如果需要,如何创建一个可以导入单个组件的库 à la lodash
- nginx - Nginx 入口控制器不会通过重定向保留 url
- angular - 无法使用 Angular CLI 创建新项目
- google-cloud-dataflow - 如何获取通过数据流运行的查询的 BigQuery 作业 ID?
- wso2 - WSO2:如何通过 Java API 更改“帐户管理策略”特别是“锁定空闲帐户”
- python - 如何在 html 模板中连接两个模型?
- google-analytics - GA/GTM 自定义维度错误(未定义)
- unix - 詹金斯管道失败并出现错误 -
杀死 ./mvnw 测试