可变参数编程可以具体用一个例子来进行说明和分析:
#include
#include
#include
float average(int n_values,...)
{
va_list var_arg;
int count;
float sum=0;
va_start(var_arg,n_values);
for(count=0;count
{
sum +=va_arg(var_arg,int);
}
va_end(var_arg);
return sum/n_values;
}
int main()
{
printf("%f\n",average(3,10,20,30));
}
{
va_list var_arg;
int count;
float sum=0;
va_start(var_arg,n_values);
for(count=0;count
{
sum +=va_arg(var_arg,int);
}
va_end(var_arg);
return sum/n_values;
}
int main()
{
printf("%f\n",average(3,10,20,30));
}
//va_list转到定义时:typedef char * va_list;利用typedef让它变成一个类型名,char *
va_list定义了一个名为var_arg的字符型指针
#define va_start _crt_va_start
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
4 4 4
此结果算下来为4,就是sizeof(int)的大小
#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
p=(char *)4+4
va_start(var_arg,n_values);//n_values表示参数的个数
va_end(var_arg);va_end的定义:
#define va_end _crt_va_end
#define _crt_va_end(ap) ( ap = (va_list)0 ) p=(char *)0 将指针置为空。