|
发表于 2023-6-8 11:24:07
|
显示全部楼层
在 C 语言中,有一些函数能够接受不确定数量的参数,这种函数我们称为具有可变参数的函数。比如我们常用的 printf 和 scanf 函数就可以接受任意数量的参数。
可变参数是通过使用一种叫做 stdarg(standard argument)的库实现的,它定义了一组宏来访问函数的参数列表。
以下是可变参数的使用步骤:
1. 首先,需要在函数原型中至少声明一个必需参数,之后是三个点 (...),表示函数可以接受任意数量和类型的参数。
- int function(int arg1, ...);
-
复制代码
2. 在函数体内,我们需要使用 va_list 类型的变量(在这个例子中我们称其为 args )来访问可变参数。
3. 使用 va_start 宏来初始化 args 变量。 va_start 需要两个参数:va_list 变量和可变参数列表前的最后一个已知参数。
4. 使用 va_arg 宏来访问可变参数。 va_arg 需要两个参数:va_list 变量和想要访问的参数的类型。
- int arg = va_arg(args, int);
-
复制代码
5. 使用 va_end 宏来结束可变参数的访问。
以下是一个使用可变参数的例子,该函数计算任意数量的整数的和:
- #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);
- }
- va_end(args);
- return total;
- }
- int main() {
- printf("%d\n", sum(3, 1, 2, 3)); // 输出 6
- printf("%d\n", sum(5, 1, 2, 3, 4, 5)); // 输出 15
- return 0;
- }
复制代码
在这个例子中, sum 函数可以接受任意数量的整数并计算它们的和。 count 参数告诉函数有多少个额外的参数被传递进来。在函数体中,我们使用 va_start 、 va_arg 和 va_end 宏来访问和处理这些可变参数。 |
|