1. 什么是可变参数列表
除了参数列表中有固定参数外, 还有类型与个数不确定的参数, 在函数原型中用 “..."。 比如 float add ( int num, ... )
2. 怎么对其操作
C语言中定义了宏来处理可变列表, va_start, va_arg, va_end这三个宏和va_list这个指针类型。 它们都包含在 stdarg.h头文件中。
3. va_start
在头文件中表示为 #define va_start ( ap, v ) ( ap = (va_list)&v + _INTSIZEOF(v) )
ap是va_list类型指针, v是参数列表中最后一个固定参数,va_start功能是将va_list指针指向v的下一个参数的地址(即第一可变参数的地址)。
4. va_arg
#define va_arg(ap,t) ( *(t *)( ( ap += _INTSIZEOF(t) ) - _INTSIZEOF(t) ) )
t为类型名。 va_arg的功能 将指针ap指向下一个t类型元素, 再将上一个元素强制转换为t类型,并返回它的值。
5. va_end
#define va_end(ap) ( ap = (va_list)0 )
va_end功能是 置ap指针为空。 即ap = NULL;
6. va_list类型
在文件中定义为 typedef char * va_list;
也就是字符指针类型, 也因为这, 可变参数不能为浮点类型。