#C 语言标准库头文件 stdarg.h
这个头文件提供 函数的可变参数 的相关功能。
#示例
#include <stdio.h>
#include <stdarg.h>
#include <float.h>
// 示例1:任意数量的浮点数求最大值
double max(int count, ...) {
va_list args; // 声明一个 va_list 类型的变量
va_start(args, count); // 初始化 args,count 是最后一个固定参数
double max_value = DBL_MIN; // 保存最大值
for (int i = 0; i < count; i++) {
double value = va_arg(args, double); // 获取下一个 double 类型的参数
if (value > max_value) {
max_value = value;
}
}
va_end(args); // 清理 args
return max_value;
}
// 示例2:任意数量的浮点数求最小值
double min(int count, ...) {
va_list args; // 声明一个 va_list 类型的变量
va_start(args, count); // 初始化 args,count 是最后一个固定参数
double min_value = DBL_MAX; // 保存最大值
for (int i = 0; i < count; i++) {
double value = va_arg(args, double); // 获取下一个 double 类型的参数
if (value < min_value) {
min_value = value;
}
}
va_end(args); // 清理 args
return min_value;
}
// 示例3:任意数量的浮点数求平均值
double average(int count, ...) {
va_list args; // 声明一个 va_list 类型的变量
va_start(args, count); // 初始化 args,count 是最后一个固定参数
double sum = 0; // 保存和
for (int i = 0; i < count; i++) {
sum += va_arg(args, double); // 获取下一个 double 类型的参数
}
va_end(args); // 清理 args
return sum / count;
}
int main(void) {
printf("最大值为:%f\n", max(5, 20.0, 10.0, 30.0, 15.0, 8.0));
printf("最小值为:%f\n", min(5, 20.0, 10.0, 30.0, 15.0, 8.0));
printf("平均值值为:%f\n", average(5, 20.0, 10.0, 30.0, 15.0, 8.0));
return 0;
}
运行结果:
最大值为:30.000000 最小值为:8.000000 平均值值为:16.600000
#类型
类型 | 标准 | 说明 |
---|---|---|
va_list | C89 | 保存可变参数列表 |
#宏
宏 | 标准 | 说明 |
---|---|---|
va_start | C89 | 初始化可变参数列表 va_list |
va_arg | C89 | 读取可变参数列表 va_list 的下一个参数 |
va_end | C89 | 清理可变参数列表 va_list |
va_copy | C99 | 复制可变参数列表 va_list |