函数声明如下:
void va_start(va_list ap, last_arg);
type va_arg(va_list ap, type);
void va_end(va_list ap);
参数:
- ap – 这是一个 va_list 类型的对象,它用来存储通过 va_arg 获取额外参数时所必需的信息。
- last_arg – 最后一个传递给函数的已知的固定参数。
- type – 这是一个类型名称。该类型名称是作为扩展自该宏的表达式的类型来使用的。
在变参数的函数中,va_arg负责返回函数的参数值,例程如下:
#include<stdarg.h>
#include<stdio.h>
int sum(int, ...);
int main(void)
{
printf("10、20、30、40和 50 的和 = %d\n", sum(5, 10, 20, 30, 40, 50));
printf("15、25、35 和 45 的和 = %d\n", sum(4, 15, 25, 35, 45));
return 0;
}
int sum(int num_args, ...) //num_args为传入的参数数量
{
int val = 0;
va_list ap; //定义一个va_list对象
int i;
va_start(ap, num_args); //初始化的va_list对象
for (i = 0; i < num_args; i++)
{
val += va_arg(ap, int); //逐个获取参数,第二个参数是参数的数据类型
}
va_end(ap); //关闭va_list对象
return val; //返回结果
}
程序运行结果:
注意事项:
va_start
必须在使用va_arg
和va_end
之前被调用。va_arg
使用完成后必须通过va_end
关闭va_list对象
欢迎小伙伴讨论,文章内容如有错误请在评论区评论或发私聊消息,谢谢你。