亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 语言可变参数详解:stdarg.h 实战指南

有时需要函数接受可变数量的参数,而非预定义固定参数。C 语言提供了解决方案,允许定义接受可变参数的函数。示例定义如下:

int func(int, ... ) {
    ...
}
int main() {
    func(1, 2, 3);
    func(1, 2, 3, 4);
}

注意:函数 func() 最后一个参数为省略号(...),其前一个参数必须是 int,表示传入的可变参数总数。使用该功能需包含 stdarg.h 头文件,按以下步骤实现:

按上述步骤编写可接受可变参数并返回平均值的函数:

Live Demo
#include <stdio.h>
#include <stdarg.h>
double average(int num, ...) {
    va_list valist;
    double sum = 0.0;
    int i;
    /* 初始化 valist 为 num 个参数 */
    va_start(valist, num);
    /* 访问 valist 赋予的所有参数 */
    for (i = 0; i < num; i++) {
        sum += va_arg(valist, int);
    }
    /* 清理 valist 保留内存 */
    va_end(valist);
    return sum / num;
}
int main() {
    printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5));
    printf("Average of 5, 10, 15 = %f\n", average(3, 5, 10, 15));
}

编译执行输出:

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

注意 average() 被调用两次,每次第一个参数代表后续可变参数的总数。仅省略号用于传递可变数量参数。

C语言

  1. C 语言用户自定义函数四大模式对比:参数与返回值的设计权衡
  2. C 语言存储类完全解析:auto、extern、static、register
  3. C语言中将一维与二维数组传递给函数的实战指南
  4. C++ 变量与数据类型全解析:int、double、char、string、bool 详细指南
  5. C 语言变量、数据类型与常量实战指南
  6. C 语言变量详解:类型、命名规则、定义声明与内存管理
  7. C 语言函数详解:定义、声明、调用与参数传递
  8. C 语言指针实战:从入门到高级编程
  9. C 语言位域:高效内存使用的实战技巧
  10. C 语言命令行参数完全指南:argc 与 argv 实战详解
  11. 深入理解 Verilog 赋值语句:类型、语法与最佳实践
  12. 精通Python函数参数:位置、关键字与默认参数