总共分为5个记忆点:函数原型声明写法、定义参数变量、初始化参数变量(的偏移)、给类型取参数、取参数完毕
函数原型声明写法type fun(xx,xx,xx,int arg_num,...){ }
定义参数变量 va_list arg;
初始化参数变量(的偏移)va_start(arg,arg_num);
给类型取参typevalue value = va_arg(arg,ypevalue);
取参数完毕 va_end(arg);
使用如下程序所示:
<span style="font-family:Courier New;">#include <stdio.h>
#include <stdarg.h>
long sum(int arg_num,...);
int main(void)
{
printf("12+200+43+27 = %ld\n",sum(4,12,200,43,27));
printf("5+3 = %ld\n",sum(2,5,3));
return 0;
}
//这个和int main(int argc , char ** argv) 的道理是一样的;这里的arg 指针相当argv 字符串数组指针,只不过
//需要用va_start 来初始化arg指针,使之指向参数列表(字符串数组) ,然后用va_arg 来访问而已
long sum(int arg_num,...)
{
long s = 0,n;
va_list arg; //定义参数指针
va_start(arg,arg_num); //用... 前面的最后一个参数来初始化参数指针arg ,最好此参数为可变参数的个数,
for(n = 0; n<arg_num; n++) //这样可用于确定可变参数个数
{
s += va_arg(arg,int); //提取参数
}
va_end(arg);
return s;
}</span>
注意:main()函数自己不可用可变参数va_arg 了,它有它自己的机制,它用命令行参数而已