va_list是在C语言中解决可变参数问题的一组宏,在头文件<stdarg.h>下。
va_list的用法:
1、首先在函数里定义一个va_list型的valist变量,这个变量是指向参数的指针。
2、然后用va_start初始化valist变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。
3、然后用va_arg返回可变的参数,va_arg的第二个参数是需要返回的参数的类型。
4、最后用va_end结束可变参数的获取。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
// 函数声明
int sum_more(int num, ...);
int main()
{
int k;
// 计算num个数字的和,
k = sum_more(3, 3, 4, 5);
printf("k = %d", k);
return 0;
}
// 加法
int sum_more(int num, ...)
{
va_list valist;
int i;
int total = 0;
// 为 num 个参数初始化 valist
va_start(valist, num);
// 访问所有赋给 valist 的参数
for (i = 0; i < num; i++)
{
total += va_arg(valist, int);
}
// 清理为 valist 保留的内存
va_end(valist);
return total;
}