c++之库函数stdarg的使用和解析

在我们常定义一个函数时,并不是所有情况下我们都能知道参数的类型和个数。在这个时候我们就可以用到库函数 “cstdarg”
对英语掌握比较好的建议去 cplusplus 这里详细的讲解。不过我还是在此处用实例来讲解一下他的使用。
cstdarg可变参数列表主要包括三部分内容:
va_list 用于检索函数中附加的参数,作为定义在cstdarg中的宏的参数使用
va_arg 负责检索传给函数的其他附加参数
va_start 初始化一个变量参数列表
va_end 在一个函数利用va_start初始化va_list对象后,va_end应当执行。

看这些晦涩抽象的解释确实不太容易理解。这里我写了几行代码来进行解释

#include <iostream>
#include <cstdarg>
using namespace std;

/****这里我们定义了一个可变参数列表的函数*******/
void Print (int n, ...)
{
  int i;
  //char ch;
  cout <<"输出: ";
  
  va_list vl;//创建一个参数vl,在我们看cstdarg函数原型的时候,我们可以这样理解,这里的vl
  //           是va_list型指针,至于它指向的位置则通过后面的va_start()来确定

  va_start(vl,n);//vl指向定参数n
  for (i=0;i<n;i++)
  {
    cout <<(char)va_arg(vl,int) ;//这里使用了强制类型转换
    //能不能这样输出
    //cout << va_arg(vl,char);
    //这个留给读者自己去测试
   }
  va_end(vl);
  cout << "\n" ;
}
int main ()
{
  Print(4,'z','a','q','r');
  return 0;
}

如此一来我们便可总结出这个库函数的基本使用方法。
首先va_list创建一个变量vl(亦或是指针)
然后va_start(vl,参数列表最后一个确定参数)
然后va_arg(vl,元素类型)获取元素
最后va_end;

下面看看运行结果
运行结果

给个赞支持一下,谢谢!

猜你喜欢

转载自blog.csdn.net/NIUNIUDEDALAO/article/details/105190178
今日推荐