📅  最后修改于: 2023-12-03 14:59:39.097000             🧑  作者: Mango
在 C 语言中,我们可以使用可变参数函数来让函数能够处理不确定个数和类型的参数。这种函数被称为可变参数函数,其定义使用了特殊的语法来实现。
可变参数函数的定义语法如下:
返回值类型 函数名(固定参数, ...) {
// 可以通过 va_list、va_start、va_arg 和 va_end 访问可变参数
}
其中,固定参数用来指定可变参数之前的已知参数列表,省略号表示可变参数。
在可变参数函数内部,需要使用四个宏来访问可变参数,它们分别是:
va_list
:用来定义一个指向参数列表的变量;va_start
:用来初始化 va_list 变量,使其指向参数列表的第一个可变参数;va_arg
:用来返回参数列表中当前指向的可变参数,并将指针移向下一个可变参数;va_end
:用来清空 va_list 变量,释放参数列表。下面是一个可变参数函数的示例代码:
#include <stdio.h>
#include <stdarg.h>
int average(int count, ...) {
va_list ap;
int i, sum = 0;
va_start(ap, count);
for (i = 0; i < count; i++) {
sum += va_arg(ap, int);
}
va_end(ap);
return sum / count;
}
int main() {
int avg1 = average(3, 1, 2, 3);
int avg2 = average(5, 1, 2, 3, 4, 5);
printf("average of 1, 2, 3 is %d\n", avg1);
printf("average of 1, 2, 3, 4, 5 is %d\n", avg2);
return 0;
}
上面的代码中,average
函数接受一个 count
参数来指定可变参数的个数,然后使用 va_list
宏定义一个指向参数列表的指针 ap
,在循环中使用 va_arg
宏逐个读取参数列表中的整数,并使用 va_end
宏来释放指向参数列表的指针。
可变参数函数是 C 语言中非常有用的一种技巧,可以让我们编写出更加灵活和通用的函数。在实际编程中,我们可以将其用于格式化输出、动态内存分配等方面,为程序开发提供更多的便利和选择。