2023年9月8日,周五下午
目录
- 第一种方式:可变参数函数(Variadic Function)
- 头文件
- 使用方法
- 详解va_start宏
- 详解va_arg宏
- 示例程序
第一种方式:可变参数函数(Variadic Function)
可变参数函数(Variadic Function)是一种可以接受不定数量参数的函数。
头文件
stdarg.h或cstdarg
使用方法
使用可变参数函数必须指定最后一个参数的类型为省略号"..."
在函数体内,需要使用 va_list、va_start宏、va_arg宏 和 va_end宏 来处理可变参数。
va_list 类型的变量用于遍历可变参数。
va_start宏 初始化 va_list 变量,获取到第一个可变参数的位置
va_arg宏 获取下一个参数。
va_end宏 清理 va_list 变量。
详解va_start宏
va_start宏如何知道第一个可变参数的位置?
va_start(va_list变量,参数列表中最后一个常规参数);
va_start会根据最后一个常规参数获知从哪个位置开始是可变参数。
例如:
func1(int a,int b,int c,...){
va_list args;
va_start(args,c);
//这样就知道从参数c开始是可变参数了
}
详解va_arg宏
va_arg(va_list变量,数据类型);
数据类型可以是任意有效的C++数据类型或自定义类型。
示例程序
#include <iostream>
#include <cstdarg>
// 定义一个接受可变参数列表的函数
double average(int count, ...) {
va_list args;
double sum = 0;
// 初始化args,使其指向第一个可变参数
va_start(args, count);
// 遍历可变参数列表,累加求和
for (int i = 0; i < count; ++i) {
sum += va_arg(args, int);
}
// 结束可变参数列表的处理
va_end(args);
// 计算平均值并返回
return sum / count;
}
int main() {
std::cout << "Average of 1, 2, 3: " << average(3, 1, 2, 3) << std::endl;
std::cout << "Average of 5, 10, 15: " << average(3, 5, 10, 15) << std::endl;
return 0;
}