国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > stdarg.h 以获得更好的体验。

# C 语言标准库头文件 stdarg.h

请查看 C 语言标准库头文件列表 了解更多相关 API。

这个头文件提供 函数的可变参数 的相关功能。

# 类型

类型 标准 说明
va_list C89 保存可变参数列表

#

标准 说明
va_start C89 初始化可变参数列表 va_list
va_arg C89 读取可变参数列表 va_list 的下一个参数
va_end C89 清理可变参数列表 va_list
va_copy C99 复制可变参数列表 va_list

# 推荐阅读

# 示例

#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
本文 更新于: 2025-11-27 09:38:06 创建于: 2025-11-27 09:38:06