在函数的原型中 ,我们使用定义的形参总是与固定数目的。其实,让一个函数在不同的时候接受不同数目的参数也是可以的。为了实现可变参数列表,是通过宏来实现的。
这些宏定义在stdarg.h头文件中,下图为该头文件的解释
可变参数必须从头到尾按照顺序逐个访问,不可以从开始就访问参数列表中间的参数。并且参数列表中至少有一个命名参数,才可以使用va_start,这个参数的作用是用于查找参数列表的可变部分。
限制:1)这些宏无法判断实际存在的参数的数量
2)这些宏无法判断每个参数的类型。
eg:
float average(int n_values,...)//计算标量参数的平均值
{
va_list var_arg;//访问可变参数未确定的部分
int count;
float sum = 0;//准备访问可变参数
va_start(var_arg,n_values);//添加取自可变参数列表的值
for(count = 0;count < n_values;++count)
{
sum += va_arg(var_arg, int );
}
va_end(var_arg);
return sum / n_values;
}
int main()
{
average(3,1,2,3);
printf("%f \n",average(3,4,2,3));
return 0;
}