可变参数列表
1.参数至少有一个
2.函数传参是从右往左传,而且是连续的。
所以我们可以通过最后一个参数的地址及每个参数的所占字节数、参数的个数,访问每一个参数。
int average(int n, ...)
{
va_list arg;
int sum = 0;
int I = 0;
va_start(arg, n);
for(I=0; I<n; I++)
{
sum+=va_arg(arg,int);
}
va_end(arg);
return sum/n;
}
函数利用了四个宏,
va_list: 可以理解为char*
va_start:va_start(arg,n),是通过n的地址及n的字节数,计算第二个参数的地址,并把值赋给arg
va_arg:解引用arg并将值赋给sum,同时将arg指向下一个参数.