可变参数

            ## **可变参数** ##

可变参数 : 是通过宏来实现的

    **1,可变参数的用法**

1,首先声明一个类型va_list的变量,与下面几个宏配合使用,访问参数的值。
2,va_start()用来初始化可变参数列表,它的第一个参数是va_list类型的变量的名字,第二个参数是省略号前最后一个有名字的参数,初始化过程把变量指向可变参数部分的第一个参数。
3,va_arg()返回这个参数的值,并使变量指向下一个可变参数,这个宏接收两个参数,va_list变量和参数列表中下一个参数的类型。
4,最后,访问完毕最后一个可变参数之后,调用va_end()用来释放这个变量,参数就为这个变量。

    **2,可变参数的限制**

可变参数必须从头到尾按照顺序逐个访问,可以半途中止访问,但不能一开始直接访问参数列表中间的参数。

    3,使用这三个宏简单实现printf函数
#include<stdio.h>
#include<stdarg.h>

void my_printf(char *formal, ...)
{
     int tmp;  //用来接收va_arg int类型的返回值
     float ftmp;
     char ctmp;
     char *stmp;

     va_list va;
     va_start(va,formal); //初始化参数列表

     while(*formal)
     {
         if(*formal != '\0')
         {
            formal++;
            continue;
         }
         formal++;
         switch(*formal)
         {
             case 'd' :
                tmp = va_arg(va,int);
                printf("%d\n",tmp);
                break;
             case 'f' :
                 ftmp = va_arg(va,float);
                 printf("%f\n",float);
                 break;
             case 'c' :
                 ctmp = va_arg(va,char);
                 printf("%c\n",ctmp);
                 break;
             case 's' :
                 stmp = va_arg(va,char*);
                 printf("%s\n",stmp);
                 break;
             default :
                 break;  
         }
     }
     va_end(va); //释放va变量
}

int main()
{
    char *str = "%d %d %d“;
    my_printf(str,12,23,45);
    return 0;
}

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值