可变参数函数(Variadic functions)是stdarg.h内容典型的应用。stdarg.h是C语言中C标准函数库的头文件,stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数。
可变参数函数的参数数量是可变动的,它使用省略号来忽略之后的参数。
可变参数函数最少要有一个命名的参数,所以 char *wrong(...) 在c中是不被允许的。
(但在C++中,这样的声明是合理的),
我们要
访问未命名的可变参数,首先必须在可变参数函数中声明va_list类型的变量。调用
va_start
并传入两个参数:第一个参数为va_list类型的变量,第二个为省略号前最后一个有名字的参数的名称,接着每一调用va_arg就会返回下一个参数,va_arg的第一个参数为va_list,第二个参数为返回的类型。最后va_end必须在函数返回前被va_list调用(va_list当作参数)(没有要求要读取完所有参数)。
以下是两个示例函数,帮助我们理解它。
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
|
#include
#include
int
Avg(
long
long
n...)
//求平均值
{
//n的作用:1、记录省略号的开头 2、确定省略号中数据的个数。
int
sum =
0
; va_list list;
//char *list
va_start(list, n);
//通过n找到省略号的开头
for
(
int
i =
|