函数参数:不定量参数

函数参数:不定量参数

使用说明

详见《可变参数.md》,C++头文件为

底层原理说明

  • va_list变量是一个char*,也就是一个指针,声明时为空(此处命名为arg)

  • 在va_start时,为arg赋值参数的地址

  • 在va_arg时,将arg指向的地址解读为传入类型,再将这个指针递增一个该类型大小的空间

  • 在va_end时释放内存

好处

相比于数组传参,不定量参数的变量类型可以更灵活

自己设计可变参数结构体

使用这种结构体代替可变参数

课程案例

#include<iostream>
struct Sarg {
int count;
char* arg;
};

int Average(Sarg& y)
{
int sum{};
int* arg = (int*)y.arg;
for (int i{}; i < y.count; i++)
{
sum += arg[i];
}
return sum / y.count;
}
int main()
{
Sarg y;
y.count = 5;
y.arg = (char*)new int[5] {1, 2, 3, 4, 10}; //此处转成char*,在函数里再转回int*
std::cout << Average(y);
}

类型不同的方法

使用链表,将数据进行链接