写在开头:
当我们想实现的函数功能的参数不确定时,我们就不能用同一个函数去实现不同参数的传递,此时,我们可以将函数实现成为可变参数的形式,可以使函数接受一个以上任意参数的传递。
举个栗子:
int main()
{
int ave = 0;
ave = average(2, 2,2);
printf("%d\n", ave);
ave = average(3, 2,2,2);
printf("%d\n", ave);
system("pause");
return 0;
}
当我们要求平均数的时,需要调用两次average函数,第一次有四个参数,第二次有三个参数,这时可以用可变参数的形式来进行函数实现。
可变参数的形式:
int average(int n, ...)
{
va_list arg;
int i = 0;
int sum = 0;
va_start(arg, n);
for (i = 0; i < n; i++)
{
sum = sum + va_arg(arg, int);
}
return sum / n;
va_end(arg);
}
现在来解释一下这段代码的含义(在vc下查看比较直观),因为这个编译器比较久了,封装的比较简单,易于查看。我们先来了解几个在代码中出现的不熟悉的地方。
代码解释:
○选择va_list右击转到定义,可以看到 typedef char * va_list;类型重命名va_list给char*,则可以替换掉。