C的变长参数

5 篇文章 0 订阅
// 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;
}


 

http://www.douban.com/group/topic/31402765/

http://blog.csdn.net/u013547361/article/details/47252849

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值