可变形参:stdarg.h
定义可变形参的类型时,第一个形参必须确定类型。
取出实参步骤:
1.定义一个va_list的类型变量(用于存储堆栈的首地址)
va_list a;
2.调用函数:va_star(va_list,) 将堆栈的首地址存入到a中
3.va_arg宏,将每一个数据取出。
4.va_end释放
void fun(char a,int num...)
{
1.初始化
va_list ap;
va_start(ap,num) 初始化 num代表最后一次形参的名字
规定:int 所以的形参为int 值:个数
2.取出数字
while(num!=0)
{
int value=va_arg(ap,int)
printf("%d\n",value);
num--;
}
3.释放
va_end(ap);
}
void main()
{
fun('a',5,'a','b','c','d');
}
//可变形参:传递的值是不确定的
void fun(int a,...)//所有元素都是整型
{
//1定义指针变量:存储堆栈的首地址(数组)
va_list ap;
va_start(ap,a);//初始化
//规定:int所有的形参为int 值:个数
//2取出数字
while(a!=0)
{
int value=va_arg(ap,double);
printf("%d\n",value);
a--;
}
//3释放
va_end(ap);
}
固定形参:在定义函数时,形参列表的类型与个数是确定的
void fun(int a,int b)
{
}
可变形参:在函数传递值的个数或都类型不确定时,
返回值 函数名(形参列表,...)
{
}
eg: void fun(int c,...)
//通过如下的三个宏来分别取出堆栈中的每个实参的值
注:定义可变形参的类型时,第一个形参必须确定类型。
取出实参步骤:
1 定义一个va_list的类型变量(用于存储堆栈的首地址)
va_list ap;
2、调用宏: va_star(va_list,) 将堆栈的首地址存入到a中
3、va_arg(ap,last)宏,将每一个数据取出
ap是列表变量名
last形形参列表中最后一个确定元素的变量名;
4、va_end释放