c语言中的形参分为两种,可变形参和固定形参。当我们查找函数的用法时有的函数里面的形参列表有 ... 号,不懂的人把它当做是省略号,但其实那代表可变形参,例如printf函数:int printf(const char *format, ...);
使用可变形参分为4个步骤。首先我们得加上头文件:include<stdarg.h>
1 、定义一个va_list的类型变量(用于存储堆栈的首地址)
va_list ap;
2、调用宏: va_star(ap,format) 将堆栈的首地址存入到a中,format是形参列表最后一个已知类型形参(***这里注意,形参列表开头一定是已知形参)
3、va_arg(ap,type)宏,将每一个数据取出
ap是列表变量名
type是要取出的类型,注意char会转变成int类型,float会转变成double,因为有精度要求;
4、va_end释放
fun(int num,...)
{
va_list ap;
va_start(ap,num);
while(num>0)
{
printf("%d\n",va_arg(ap,int));
num--;
}
va_end(ap);
}
void main()
{
fun(5,1,2,3,4,5);
}
这里的num代表第一个参数值,用它表示可变参数的个数。printf函数的功能就是用可变参数实现的,它的第一个参数是字符串,后面的参数是根据前面字符串的需求取出的