这一组函数涉及的stdarg.h头文件,可以实现函数参数的变长传递,在头文件中定义了一个va_list,这个变量是一个字符指针,由va_start,va_end界定
typedef struct{
char *a0;
int offset;
}va_list;
可变长的参数控制函数
void va_start (va_list ap,last);
type va_arg(va_list ap,type);
void va_end(va_list ap)
void va_copy(va_list dest,va_list src)
在调用参数表以前,定义一个va_list类型变量
对ap进行初始化,初始化后ap指向可变参数表中第一个参数,该功能通过ca_start函数实现
获取参数,调用va_arg,第一个参数是ap,第二个参数是要获取的参数的指定类型,然后返回这个指定类型的值,并且把ap的位置指向便参数的像一个变量位置
获取所有的参数后,需要关闭这个ap指针,调用va_end函数即可
例子:
#include <stdio.h>
#include <stdarg.h>
int max(int n,....)
{
int i;
va_list ap;
va_start(ap,n);
int max = -0x7fffffff;
int tmp;
for(i = 0;i < n ;i++)
{
tmp = va_arg(ap,int);
if(max <tmp)
max = tmp;
}
. va_end(ap);
return max;
}
int main()
{
printf("The max value of max() is %d\n",max(1,10,20,5));
}