c 语言中的vararges

http://www.eskimo.com/~scs/cclass/int/sx11b.html 

 http://www.52rd.com/blog/Detail_RD.Blog_zjhfqq_7608.html


#include < stdio.h >

#include < string.h >
#include < stdarg.h >


/* 函数原型声明,至少需要一个确定的参数,注意括号内的省略号 */
int demo( char *, … );


void main( void )
{
demo(”DEMO”, “This”, “is”, “a”, “demo!”, “\0″);
}


int demo( char *msg, … )
{
va_list argp; /* 定义保存函数参数的结构 */
int argno = 0; /* 纪录参数个数 */
char *para; /* 存放取出的字符串参数 */
// 使用宏va_start, 使argp指向传入的第一个可选参数,
// 注意 msg是参数表中最后一个确定的参数,并非参数表中第一个参数
va_start( argp, msg );
while (1)
{
//取出当前的参数,类型为char *
//如果不给出正确的类型,将得到错误的参数
para = va_arg( argp, char *);
if ( strcmp( para, “\0″) == 0 ) /* 采用空串指示参数输入结束 */
break;
printf(”参数 #%d 是: %s\n”, argno, para);
argno++;//注意:栈底在高地址,栈顶在低地址,所以这里是++
}
va_end( argp ); /* 将argp置为NULL */
return 0;
}


//输出结果
/*参数 #0 是: This
参数 #1 是: is
参数 #2 是: a
参数 #3 是: demo!*/




//================================ 例子程序2 ===============


#include < stdio.h >
#include < string.h >
#include < stdarg.h >
int average( int first, … ); //输入若干整数,求它们的平均值


void main( void )
{
/* 调用3个整数(-1表示结尾) */
printf( “Average is: %d\n”, average(2,3,4, -1));


/*调用4个整数*/
printf( “Average is: %d\n”, average(5,7,9, 11,-1));


/*只有结束符的调用*/
printf( “Average is: %d\n”, average(-1) );
}


/* 返回若干整数平均值的函数 */
int average( int first, … )
{
int count = 0, sum = 0, i = first;
va_list marker;


va_start( marker, first ); //初始化
while( i != -1 )
{
sum += i; //先加第一个参数
count++;
i = va_arg( marker, int);//取下一个参数
}
va_end( marker );
return( sum ? (sum / count) : 0 );
}
/*
//输出结果
Average is: 3
Average is: 8
Average is: 0
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值