C基础知识(12):可变参数
该功能需要使用<stdarg.h>。函数的最后一个参数写成省略号,即三个点号(...),省略号之前的那个参数是int,代表了要传递的可变参数的总数。该文件提供了实现可变参数功能的函数和宏。
具体步骤如下:
(1) 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。
(2) 在函数定义中创建一个va_list类型变量。
(3) 使用int参数和va_start宏来初始化va_list变量为一个参数列表。
(4) 使用va_arg宏和va_list变量来访问参数列表中的每个项。
(5) 使用宏va_end来清理赋予va_list变量的内存。
1 #include <stdio.h> 2 #include <stdarg.h> 3 4 double average(int num, ...); 5 6 int main() { 7 printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5)); 8 } 9 10 double average(int num, ...) { 11 va_list valist; 12 double sum = 0.0; 13 int i = 0; 14 // 为num个参数初始化valist 15 va_start(valist, num); 16 // 访问所有赋给valist的参数 17 for (i = 0; i < num; i++) { 18 sum += va_arg(valist, int); 19 } 20 // 清理为valist保留的内存 21 va_end(valist); 22 return sum / num; 23 }
另外一种格式:
1 #include <stdarg.h> 2 #include <stdio.h> 3 4 void std_vararg_func(const char *pszFormat, ...) { 5 va_list args; 6 va_start(args, pszFormat); 7 8 printf("%d\n", va_arg(args, int)); 9 printf("%f\n", va_arg(args, double)); 10 printf("%s\n", va_arg(args, char*)); 11 12 va_end(args); 13 } 14 15 int main() { 16 std_vararg_func("%d %f %s\n", 4, 5.4, "hello world"); 17 return 0; 18 }