[C/C++]函数可变参数表

以前看《C++ Primer》就看到过函数的可变参数列表,但是书中只是一带而过,具体用法没有介绍。现在把“圣经”看了一遍,以前的很多疑问都烟消云散。
  可变参数的使用主要用到标准头文件<stdarg.h>中定义一组宏定义,它们对如何遍历参数表进行了定义。其中:va_list类型声明一个变量(如ap),该变量将依次引用各参数。va_start将ap初始化为指向第一个无名参数的指针。每次调用va_arg,该函数都将返回一个参数,并将ap指向下一个参数。最后调用va_end,完成必要的清理工作.
 下面是用可变参数表实现的简化的printf函数,代码如下:

#include <stdarg.h>
void minprintf(char *fmt, ...){
     va_list ap;
     char *p, *sval;
     int ival;
     double dval;
     va_start(ap, fmt);
     for (p = fmt; *p; p++) {
         if (*p != '%') {
             putchar(*p);
             continue;
         }
         switch (*++p) {
           case 'd':
               ival = va_arg(ap, int);
               printf("%d", ival);
               break;
           case 'f':
               dval = va_arg(ap, double);
               printf("%f", dval);
               break;
           case 's':
               for (sval = va_arg(ap, char *); *sval; sval++)
                   putchar(*sval);
               break;
           default:
               putchar(*p);
               break;
           }
       }
       va_end(ap);
   }

  

转载于:https://www.cnblogs.com/skycore/p/4854965.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值