场景:假如我们需要求两个数的平均数可以这样实现。
int average(int n1,int n2){
int sum=n1+n2;
int m=sum/2;
return m
}
求三个数的平均数可以这样实现:
int average(int n1,int n2,int n3){
int sum=n1+n2+n3;
int m=sum/3;
return m
}
求四个或者五个甚至更多呢,只需要做简单的修改就行了。
但是如果在一个程序中要求不同数量的数字的平均数就需要多个函数来实现,显然是太麻烦了。如果每次传入不同数量的参数可以用一个程序实现就完美了,那么就引入了c语言中的可变参数。
定义:通过将函数实现为可变参数的形式,使得函数可以接受一个以上任意多个的参数(不固定)。
例子:求任意个参数的平均值
int average(int n, ...){
//需要知道可变参数的类型和个数n
va_list arg;//用与访问参数列表的未确定部分
int i = 0;
int sum = 0;
va_start(arg, n);//初始化
for (int i = 0; i < n; i++){
sum += va_arg(arg, int);//宏接收
}
return sum / n;
va_end(arg);
}
注意事项:
1.可变参数必须从头到尾逐个访问
2.参数列表中至少有一个命名参数
3.这些宏无法直接判断实际存在的参数的数量
4.这些宏无法判断参数的类型
5.如果va_arg中指定了错误的类型,其后果是不可预测的。