在我们常定义一个函数时,并不是所有情况下我们都能知道参数的类型和个数。在这个时候我们就可以用到库函数 “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;
下面看看运行结果
给个赞支持一下,谢谢!