可变参数

可变参数

为了能使函数具有可变参数,需要导入头文件<stdarg.h>

原理

在函数栈中根据依次查询参数地址。头文件中使用宏定义实现参数地址查询。

注意

至少有一个参数

应用

先使用va_list 定义一个变量。(本质是char*类型)

再调用va_start(artptr,lastarg)初始化va_list,lastarg是参数数量

调用va_arg(artptr,type)访问当前的参数,类型为type,并将指针后移

最后调用va_end(argptr)清理va_list的内存

案例

#include <stdio.h>
#include <stdarg.h>

double average(int num,...)
{

va_list valist;
double sum = 0.0;
int i;

/* 为 num 个参数初始化 valist */
va_start(valist, num);

/* 访问所有赋给 valist 的参数 */
for (i = 0; i < num; i++)
{
sum += va_arg(valist, int);
}
/* 清理为 valist 保留的内存 */
va_end(valist);

return sum/num;
}