转:https://blog.csdn.net/garygeeker/article/details/24248573
源码:
typedef void* va_list;void va_start (va_list ap, prev_param ); /* ANSI version */typedef va_arg(va_list ap, type );void va_end(va_list ap );
1.va_list表示可变参数列表类型,实际上就是一个void *指针
2、va_start (va_list ap, arg);
va_start用于获取函数参数列表中可变参数的首指针(获取函数可变参数列表)
* 输出参数ap(类型为va_list): 用于保存函数参数列表中可变参数的首指针(即,可变参数列表)
* 输入参数A: 为函数参数列表中最后一个固定参数(格式化字符串: const char *format)
3.va_arg
va_arg用于获取当前ap所指的可变参数并将并将ap指针移向下一可变参数
* 输入参数ap(类型为va_list): 可变参数列表,指向当前正要处理的可变参数
* 输入参数T: 正要处理的可变参数的类型
* 返回值: 当前可变参数的值
4.va_end
他是输入的参数 ap 置为 NULL