如printf("%s, %d,...\n", char, int, ...);
传入个数可变的参数,就能打印相应个数的参数
C语言中,使用va_list来解决变参的问题
VA_LIST是用来解决变参问题的一组宏,头文件在#include <stdarg.h>,用于获取不确定个数的参数
va_list:是一个字符指针,在代码中可以理解为指向当前参数的一个指针
//对va_list变量进行初始化,将ap指针指向参数列表中的第一个参数
void va_start(va_list ap, param);
//获取参数,类型为type,返回值类型也为type类型
type va_arg(va_list ap, type);
//将ap(通常是字符串)按format格式写入字符串string中
int vsprintf(char *string, char *param, va_list ap);
//回收ap指针
void va_end(va_list ap);
所以解决变参问题就变成了如下四步
1)首先在函数里定义va_list类型的变量ap,即指向参数的指针;
2)然后用va_start函数初始化刚才定义的ap指针;
3)然后用va_arg函数返回可变的参数,即va_arg(va_list ap, type);
4)最后用va_end函数回收va_list的ap指针;
Demo实例//获取参数列表中的最大值
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> int getMAX(int ss, ...) { int ret = 0, tmp; va_list ap; va_start(ap, ss); for (int i = 0; i < ss; i++) { tmp = va_arg(ap, int); if (ret < tmp) ret = tmp; } va_end(ap); return ret; } int main(int argc, const char * argv[]) { int num = 5; int data; data = getMAX(num, 2, 5, 6,3 ,8); printf("%d\n", data); return 0; }