C++可变参数列表 va_list

      对于C++开发中,肯定有时候需要用到 func(a,b,c, ... )这种不确定参数多少的时候,对于这种可变参数列表,va_list就是用来操作这种参数列表的工具。

      va_list是类型定义, 我们先来定义一个变量: 

      va_list   args;

      此时 args 还未初始化,类似一个空指针,接下来我们要把这个‘’空指针|‘’ 指定到我们需要的位置上。示例中我们需要的位置是指到参数c后面。 va_start 就是专门干这活的。  当然,用完之后我们要把这个‘’指针‘’置空,用 va_end 来干。

    va_start(args, c);

    好了,args已经到位了,接下来就用args各种访问了(我们的目的就只是为了访问到这些参数而已)。用var_arg 来干。

    var_arg(args,int);   //每次返回一个int ( 根据实际情况确定类型) 参数并把位置往前推1,一般从前往后循环调用。

    但是 var_arg本身并不知道在哪里结束,所以用while(1){ var_arg(args,int);} 会无限循环直到内存访问越界程序coredump。 最好就传参时传入一个专门用于标识结尾的参数 "12345678" 类似的。当返回值等于标识数时,结束访问。

 

   访问完毕,不在需要使用了,狡兔死,猎狗烹; 用va_end干掉

   va_end(args);

 

总结: 1、va_list          定义 临时变量; 

             2 、 va_start     指定位置 

             3、  va_arg       遍历访问

             4、va_end         收尾工作

你可能感兴趣的:(学习,C++)