可变参数列表是通过宏来实现的,这些宏定义于stdarg.h 头文件中。
这个头文件声明了一个类型va_list 和 三个宏 va_start 、va_arg 和 va_end。
我们可以声明一个类型为va_list 的变量,与这几个宏配合使用,访问参数的值。
1、求平均值
2、求最大值
3、实现一个简化的print 函数
void Print(char *str,...)
{
va_list list;
va_start(list,str);
char ch;
char *p;
int m;
double n;
while(*str != ‘\0‘)
{
if(*str == ‘%‘)
{
switch(*(str+1))
{
case ‘c‘: ch = va_arg(list,char);
putchar(ch);
str += 2;
break;
case ‘s‘: p = va_arg(list,char*);
printf("%s",p);
str += 2;
break;
case ‘d‘: m = va_arg(list,int);
printf("%d",m);
str += 2;
break;
case ‘f‘: n = va_arg(list,double);
printf("%f",n);
str += 2;
break;
default : putchar(*str++);
break;
}
}
else
putchar(*str++);
}
}
int main()
{
char *p = "avc";
int b = 9;
double m = 0.9;
char c = ‘a‘;
Print("%s,%d,%c,%f\n",p,b,c,m);
}