1、va_list arg{ };
等同于char*arg{ };
2、va_start();
存放参数 需要传入形参地址与数量
3、va_arg()
参数与调用次数相对应
读取参数 需要传入形参地址与类型
4、va_end();
释放参数 传入形参地址
代码演示:
#include <iostream>
#include<cstdarg>
int average(int count, ...)//unsigned count为参数个数 ...代表个数的具体值
{
int sum{ };
va_list arg{ };//相当于char*arg;
//char* arg{ };
va_start(arg,count);//该函数为了存放参数 arg存放指针为了获取参数地址
/* int y= va_arg(arg,int);//读取该函数参数,int参数类型
std::cout << y << std::endl;//1
y = va_arg(arg, int);
std::cout << y << std::endl;//2
y = va_arg(arg, int);
std::cout << y << std::endl;//3 这样可以按顺序读取参数数值 意味着每一次读取内存增加一个类型的大小
*/
for (int i = 0; i < count; i++)
{
sum += va_arg(arg, int);//读取该函数参数,int参数类型
}
sum = sum / count;
// va_end(arg); //释放内存
return sum;
}
int main()
{
std::cout << " 平均数是: " << average(5, 1, 2, 3, 6, 9) << std::endl;//数组比较方便但是只能用同一类型的数据
}