va_arg读取类型不匹配
va_arg读取类型不匹配
#include <stdio.h>
#include <stdarg.h>
double average(int num, ...) {
va_list valist;
// 定义函数额外参数序列
double sum = 0.0;
int i;
// 为num个参数初始化
va_start(valist, num);
for (i = 0; i < num; i ++) {
sum += va_arg(valist, double);
}
// 根据类型获取数字
va_end(valist);
// 释放内存
return sum / num;
}
int main() {
printf("Average of numbers is %340f\n", average(1, 1));
return 0;
}
Average of numbers is 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049406564584124654
va_arg(va, type)
是按照type
类型的格式去读取va
当前指向的数据,而且是强制性(底层数据)的。如上,我把
1(int)
类型的数据强制读成double
结果输出的值是下面的这个值。可见,这里绝不是什么自动类型提升,一定注意,不同类型的数据一定使用对应的格式去读取