// va_list实际是一个指针,用来指向各个不定参数.
// 由于类型不明,因此这个va_list以void*或char*为最佳选择
#define va_list char *
// va_start将va_list定义的指针指向函数的最后一个具名参数后面的位置,
// 这个位置就是第一个不定参数
#define va_start(ap, arg) ((ap) = (va_list)&(arg) + sizeof(arg))
// va_arg获取当前不定参数的值,并根据当前不定参数的类型将指针移向下一个参数
#define va_arg(ap, t) (*(t *)((ap += sizeof(t)) - sizeof(t)))
// va_end将指针清0
#define va_end(ap) (ap = (va_list)0)
// 返回变长参数的平均值,第一个参数代表参与运算的参数数量
#include "stdarg.h"
#include <stdio.h>
void shownum(int start,...)
{
va_list args;
int num = start;
int con = 0;//可变参数的数目
//printf("%d ",num);
va_start(args,start);
do{
++con;
printf("the %d th arg: %d\n",con,num); //输出各参数的值
num=va_arg(args,int);
}while(num!=-1);
va_end(args);
return;
}
int getave(int pa1,...)
{
int sum=0;
int num=pa1;
va_list args;
va_start(args,pa1);
while(pa1>0)
{
sum+=va_arg(args,int);
pa1--;
}
va_end(args);
return (sum?(sum/num):0);
}
int main(int argc, char* argv[])
{
int m = getave(5,1,2,3,4,5);
printf("%d\n",m);
shownum(100,200,300,100,200,300,-1);
return 0;
}
// 由于类型不明,因此这个va_list以void*或char*为最佳选择
#define va_list char *
// va_start将va_list定义的指针指向函数的最后一个具名参数后面的位置,
// 这个位置就是第一个不定参数
#define va_start(ap, arg) ((ap) = (va_list)&(arg) + sizeof(arg))
// va_arg获取当前不定参数的值,并根据当前不定参数的类型将指针移向下一个参数
#define va_arg(ap, t) (*(t *)((ap += sizeof(t)) - sizeof(t)))
// va_end将指针清0
#define va_end(ap) (ap = (va_list)0)
// 返回变长参数的平均值,第一个参数代表参与运算的参数数量
#include "stdarg.h"
#include <stdio.h>
void shownum(int start,...)
{
va_list args;
int num = start;
int con = 0;//可变参数的数目
//printf("%d ",num);
va_start(args,start);
do{
++con;
printf("the %d th arg: %d\n",con,num); //输出各参数的值
num=va_arg(args,int);
}while(num!=-1);
va_end(args);
return;
}
int getave(int pa1,...)
{
int sum=0;
int num=pa1;
va_list args;
va_start(args,pa1);
while(pa1>0)
{
sum+=va_arg(args,int);
pa1--;
}
va_end(args);
return (sum?(sum/num):0);
}
int main(int argc, char* argv[])
{
int m = getave(5,1,2,3,4,5);
printf("%d\n",m);
shownum(100,200,300,100,200,300,-1);
return 0;
}
http://www.douban.com/group/topic/31402765/
http://blog.csdn.net/u013547361/article/details/47252849