一、指定参数为int型
#include<stdlib.h>
#include<stdio.h>
#include<stdarg.h>
int sum(int count, ...);
int main()
{
int nS = sum(3,1,2,3);
printf("%d\n", nS);
return 0;
}
int sum(int count, ...)
{
int _sum,arg,i;
va_list arg_ptr;
_sum = 0;
va_start(arg_ptr,count);
for(i=0; i < count; ++i)
{
arg = va_arg(arg_ptr,int);
_sum += arg;
}
va_end(arg_ptr);
return _sum;
}
说明:
va_start:用来初始化va_list,第一个参数是参数表的指针va_list,第二个参数是不定参数前的最后一个参数。
va_arg:是用来读取不定参数的,第一个参数是参数表的指针,第二个参数是参数的类型。
va_end:是用来释放va_list占用的资源的,只有一个参数。
二、未知参数类型
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
函数说明:将可变参数格式化输出到一个字符数组
参数:str输出到的数组,size指定大小,防止越界,format格式化参数,ap可变参数列表函数用法
示例:
#include <stdio.h>
#include <stdarg.h>
void test(const char * format, ...);
int main(void)
{
test("%d_%s", 6, "abc");
return 0;
}
void test(const char * format, ...)
{
char buf[4069];
va_list list;
va_start(list, format);
vsnprintf(buf, 4069, format, list);
va_end(list);
printf("%s\n", buf);
}
输出结果为:6_abc