cstdarg库的使用之不定量参数
几个函数:
1、va_start(va_list arg,unsigned count);
目的: 找到不定量参数临时占用的栈空间首地址,并告诉编译器参数个数
2、va_arg(va_list arg,typename);
目的: 根据不定量参数的首地址和类型名,来进行不同的偏移取值
注意: 这个函数每用一次,参数便读一次。通过多次使用这个函数来达到读取全部参数的功能
3、va_end(va_list arg);
目的: 释放这块内存
代码案例如下:
#include <iostream>
#include<cstdarg> //需要包含这个库
using namespace std;
//第一个变量为参数个数,最好时无符号整数的,后面一个逗号+三个‘.’
int Add(unsigned count, ...)
{
int sum{};
//char * c_arg{};
//本质上就是char*型的,目的就是指向那几个参数的首地址(参数肯定是连续的)
va_list c_arg{};
//找到变量首地址
va_start(c_arg, count);
for (int i= 0; i < count; i++)sum += va_arg(c_arg, int); //反复读取
va_end(c_arg); //释放内存
return sum;
}
int main()
{
cout << "3+2+1 = " << Add(3, 1, 2, 3) << endl;
}