可变参数列表即函数参数可以是不固定的,
例如常规函数 type func(type A,type B,type C);定义了三个参数,因此调用的时候也必须导入三个参数。
可变参数列表type func(type A , ......);type A为固定参数,......省略号为可变参数列表,可长可端。常见的printf函数声明为int printf(const char *fmt, ...)
介绍可变参数列表的几个应用点:
1.头文件 #include <stdarg.h>
2.数据结构
2.1 va_list 数据变量类型,实则是一个char 类型指针
2.2 va_start(arg_ptr, argN) 返回可变参数列表开始的指针,argN为函数声明中最后一个固定参数
2.3 va_arg(arg_ptr, type) 返回空间指向空间type类型的数据
2.4 va_end(arg_ptr) 清空参数列表,并设置参数指针arg_ptr无效
注:va在这里是variable-argument(可变参数)的意思
举例:
#include <stdio.h> #include <stdarg.h> void simple_va_fun(int start, ...) { va_list arg_ptr; int nArgValue = start; //可变参数的总值 int nArgCout = 0; //可变参数的数目计数 va_start(arg_ptr, start); //返回固定参数start后的可变参数列表起始地址 do { ++nArgCout; nArgValue = va_arg(arg_ptr, int);//得到一个可变参数的整型值(arg_ptr指向的int类型数据) printf("the %d th arg: %d\n", nArgCout, nArgValue); //输出参数值 } while (nArgValue != -1); //等于-1则退出循环部分 va_end(arg_ptr); // 清空参数列表,并设置参数指针arg_ptr无效 } int main(int argc, char* argv[]) { simple_va_fun(100, 200, 12, 25, 56,-1); return 0; }
执行结果如下: