变参数函数应用

在C语言中常用到的printf函数就是变参数函数。

函数定义如下void printf(const char* fmt, ...)  后面的...就是可变参数。


应用变参数函数需要用到<stdarg.h>

C中变长实参头文件stdarg.h提供了一个数据类型va_list和三个宏:va_start,va_arg,va_end

→ typedef char * va_list;                   用来指向上述三个宏所需数据的位置

#define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) ) 

     用来使ap指向函数可变参数表中的第一个参数;v是函数参数中最后一个固定参数的标示符。

     其中   #define_INTSIZEOF(n)   ( (sizeof(n) +sizeof(int) - 1) & ~(sizeof(int) - 1) )  

→ #define va_arg(ap,type)    ( *(type *)((ap += _INTSIZEOF(type)) -_INTSIZEOF(type)) )   

      用来将参数转换成需要的类型,并使ap指向下一个参数  

→ #defineva_end(ap)      ( ap = (va_list)0 ) 

     该宏用于被调用函数完成正常返回,功能就是把指针ap赋值为0,使它不指向内存的变量


使用方法举例; 连乘函数

#include <stdarg.h>

Int multiply(int n, ...){
    int i = 0;
    int multi = 1;
	
    va_list ap;
    va_start(ap,n);  //指向可变参数列表
    for(i = 0; i <= n; i++)  multi = multi *va_arg(ap, int);  //取出参数,并将ap指向下一个参数
    va_end(ap);
    return multi;
}


 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值