可变参函数va_list, va_start, va_arg 和 va_end
1、通过例子说明 va_list 的用法
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
int f(int x, int y, int z)
{
return x + y + z;
}
int sum(int size, ...)
{
va_list vp;
int s = 0;
int i = 0;
va_start(vp, size);
for (i = 0; i < size; ++ i) {
s += va_arg(vp, int);
}
va_end(vp);
printf("%d,%d\n", size, s);
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
printf("%d\n", f(a, b , c));
sum(5, 20, 30, 40, 50, 20);
return 0;
}
输出如下:
[xuanmiao@localhost Demo]$ gcc va_list.c -o va_list
[xuanmiao@localhost Demo]$ ./va_list
6
5,160
说明:
va_list vp 声明一个va_list类型的指针变量 vp,指向参数列表;
va_start(vp,size) 使参数列表指针vp指向函数参数列表中的第一个可选参数;
va_arg(vp,int):返回参数列表中指针vp所指的参数,返回类型为int,并使指针vp指向下一个参数。
va_end(vp): 清空参数列表,并置参数指针vp无效。
参考博客: