c语言的可变参数

1 用户可以在调用函数的时候确定这个函数所需要的参数。

2例子:printf(const char* format,...);

  注意:第一个参数是固定的,后面的参数用三个.表示是可变的

3 实现一个可变函数所需要的一些函数介绍:

  (1)包含头文件stdarg.h 其中定义了一系列的宏来处理这个可变长度的列表。

  (2)va_list:看成数据类型,循环使用并且每次指向一个可变的参数。因此该类型的变量代表整个参数的列表。

  (3宏 va_stat宏初始化一个va_list类型的变量,让它指向第一个可变参数。

  (4)宏va_arg:返回一个可变长度参数的值并使其指向下一个可变参数

  (5)va_end做清理工作

4 流程图

   

4 实现

 1 #include <stdio.h>
 2 #include <stdarg.h>
 3 
 4 /* 可变参数函数,其中第一个参数的类型是固定的,在定义的时候必须已经定义好 */
 5 int print_args(int begin, ...)
 6 {
 7     va_list ap;
 8     char *p;
 9     int n;
10 
11     va_start(ap, begin);     /* 从可变参数的第一个参数开始遍历 */
12     p = va_arg(ap, char *);    /* 得到第一个参数 */
13     n = 0;
14 
15     while(p != NULL){    /* 可变参数以NULL结尾,在遇到NULL结束符之前输出所有的
16                         参数 */
17         n++;            /* 累计参数的个数 */
18         
19         printf("arg %d : %s
", n, p);    /* 输出每个参数 */
20     
21         p = va_arg(ap, char*);             /* 得到下一个参数 */
22     }
23     
24     va_end(ap);    /* 参数处理结束,做一些清理工作 */
25 
26     return n;    /* 返回参数的个数 */
27 }
28 
29 int main(void)
30 {
31     int n;
32     
33     n = print_args(-1, "nihao", "zhongguo", NULL); /* 第一次调用,使用4个参数 */
34     printf("first, without NULL : %d
", n);
35     
36     n = print_args(-1, "China", "beijing", "Olympic", NULL);/* 第二次调用,
37                                                               使用5个参数*/
38 
39     printf("second, without NULL : %d
", n);
40     return 0;
41 }

6 截图

 

原文地址:https://www.cnblogs.com/lanjianhappy/p/7189846.html