Cprogramming 简明教程
Variable Arguments in C
有时您可能会遇到一种情况,其中希望有一个可以接受可变数量的参数(而不是预定义数量的参数)的函数。C 编程语言为这种情况提供了解决方案。
阅读本章以了解如何根据您的要求定义可接受可变数量的参数的函数。
以下示例显示了这样的函数的 definition −
int func(int, ... ) {
...
...
}
int main() {
func(1, 2, 3);
func(1, 2, 3, 4);
}
应该指出,函数 func() 的最后一个参数是 ellipses ,即三个点(…),而紧挨在省略号之前的参数始终是一个 int ,它表示传入的总数量可变参数。
要实现这样的功能,您需要使用 stdarg.h 头文件,它提供了实现可变参数功能的函数和宏。
按照以下步骤操作 −
-
将一个函数的最后一个参数定义为省略号,而紧挨在省略号之前的参数始终是一个 int ,它将表示参数的数量。
-
在函数定义中创建 va_list 类型变量。此类型在 stdarg.h 头文件中定义。
-
使用 int 参数和 va_start 宏将 va_list 变量初始化为参数列表。宏 va_start 在 stdarg.h 头文件中定义。
-
使用 va_arg 宏和 va_list 变量访问参数列表中的每个项目。
-
使用宏 va_end 清理分配给 va_list 变量的内存。
Example
现在让我们遵循上述步骤,写一个可以采用可变数量的参数并返回其平均值的简单函数 −
#include <stdio.h>
#include <stdarg.h>
double average(int num,...) {
va_list valist;
double sum = 0.0;
int i;
/* initialize valist for num number of arguments */
va_start(valist, num);
/* access all the arguments assigned to valist */
for (i = 0; i < num; i++) {
sum += va_arg(valist, int);
}
/* clean memory reserved for 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));
}