文章

C 可变参数

C 可变参数

可变参数可以使函数接受不定量的参数

基本语法

C语言的标准库<stdarg.h>提供了一组宏来操作可变参数

1
2
3
4
5
6
7
8
#include <stdarg.h>

void func(const char *fmt, ...) {
    va_list args;         // 定义一个变量,保存参数列表
    va_start(args, fmt);  // 初始化,从 fmt 后的第一个参数开始
    int x = va_arg(args, int); // 依次取参数(指定类型)
    va_end(args);         // 清理
}

其中:

  • ... 表示可变参数。
  • va_list 是一个类型,表示可变参数列表。
  • va_start(ap, last):初始化,last 是函数形参表里最后一个固定参数的名字。
  • va_arg(ap, type):取下一个参数,类型必须写对。
  • va_end(ap):结束时清理。

程序示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdarg.h>

int sum(int count, ...) {
    int total = 0;
    va_list args;
    va_start(args, count);

    for (int i = 0; i < count; i++) {
        total += va_arg(args, int); // 每次取一个 int
    }

    va_end(args);
    return total;
}

int main() {
    printf("%d\n", sum(3, 1, 2, 3));       // 输出 6
    printf("%d\n", sum(5, 10, 20, 30, 40, 50)); // 输出 150
    return 0;
}
本文由作者按照 CC BY 4.0 进行授权