C 可变参数(C与指针实例)
偶尔我们需要设计一些函数,它们的参数数目不是固定的,这样我们需要用到可变参数列表。
可变参数列表是通过宏来实现的,定义于stdarg.h头文件。
具体内容在《C与指针》
1 #include <stdarg.h>
2 #include <stdio.h>
3
4 float average(int n_values, ... )
5 {
6 va_list var_arg; //用于访问参数列表的未确定部分,通过va_start来初始化
7 int count;
8 float sum = 0;
9
10 /*
11 准备访问可变参数
12 */
13 va_start( var_arg, n_values ); //第一个参数为va_list变量的名字,第二个参数为省略号前最后一个有名字的参数。初始化过程把va_list变量设置为指向可变参数的第一个参数
14
15 /*
16 添加取自可变参数列表的值
17 */
18 for( count = 0; count < n_values; count += 1 )
19 {
20 sum += va_arg( var_arg, int ); //可变参数必须从头到尾顺序逐个访问。在va_arg中注意不可以指定错误的类型。
21 }
22
23 /*
24 完成处理可变参数
25 */
26 va_end( var_arg );
27
28 return sum / n_values;
29 }
30
31 int main()
32 {
33 int a = average(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
34 printf("The average: %d\n", a);
35 return 0;
36 }
2 #include <stdio.h>
3
4 float average(int n_values, ... )
5 {
6 va_list var_arg; //用于访问参数列表的未确定部分,通过va_start来初始化
7 int count;
8 float sum = 0;
9
10 /*
11 准备访问可变参数
12 */
13 va_start( var_arg, n_values ); //第一个参数为va_list变量的名字,第二个参数为省略号前最后一个有名字的参数。初始化过程把va_list变量设置为指向可变参数的第一个参数
14
15 /*
16 添加取自可变参数列表的值
17 */
18 for( count = 0; count < n_values; count += 1 )
19 {
20 sum += va_arg( var_arg, int ); //可变参数必须从头到尾顺序逐个访问。在va_arg中注意不可以指定错误的类型。
21 }
22
23 /*
24 完成处理可变参数
25 */
26 va_end( var_arg );
27
28 return sum / n_values;
29 }
30
31 int main()
32 {
33 int a = average(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
34 printf("The average: %d\n", a);
35 return 0;
36 }