//可变参数 #include <stdio.h> #include <stdlib.h> #include <string.h> //引用头文件 #include <stdarg.h> /* va_list用于声明一个变量,我们知道函数的可变参数列表其实就是一个字符串,所以va_list才被声明为字符型指针, 这个类型用于声明一个指向参数列表的字符型指针变量,例如:va_list ap;//ap:arguement pointer va_start(ap,v),它的第一个参数是指向可变参数字符串的变量,第二个参数是可变参数函数的第一个参数, 通常用于指定可变参数列表中参数的个数。 va_arg(ap,t),它的第一个参数指向可变参数字符串的变量,第二个参数是可变参数的类型。 va_end(ap) 用于将存放可变参数字符串的变量清空(赋值为NULL). */ //@num:参数个数 int add(int num, ...) { va_list v;//保存可以变长的参数列表 va_start(v,num);//将形参num之后的所有参数保存到列表中 int i = 0; for (i = 0; i < num; i++) { int data = va_arg(v,int);//按照Int类型获取参数 printf("%d ",data); } //释放列表 va_end(v); return 0; } int run(int num, ...) { va_list v; va_start(v, num); int i = 0; for (i = 0; i < num; i++) { char *data = va_arg(v, char *); printf("%s ", data); } va_end(v); return 0; } void main() { add(3,1,2,3); run(3, "hello", "world", "!"); system("pause"); }