C语言可变参数列表编程

最近在看一份代码,想定义一些自己的打印信息。但是其中涉及到C语言可变参数的编程,虽然之前了解相关的内容,但还不是很熟练,不得不重新温故一下。如下代码很多原理还说不上来,权当记录基本的用法。

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>


void print_arg(int num,va_list arg);

float average(int num, ...);

int main()
{
    printf("The average is: %f\n",average(5,1,2,3,4,5));
    return 0;
}


float average(int num, ...){
    float avrg;
    int i;
    va_list args, args2print; //va_list是一种数据类型,该类型变量可以指向一个可变参数列表。
    va_start(args, num);//va_start的主要功能就是将args指向可变参数列表,第二个参数num是函数原形中省略号前一个参数。
    va_copy(args2print, args);//拷贝一份参数列表
    print_arg(num, args2print);

    for(i=0;i<num;i++){
        avrg += va_arg(args,int);//va_arg的主要作用就是根据类型(第二个参数指定)取args所指列表的当前成员,并将args指向下一个成员。
    }
    va_end(args);//做收尾工作。还说不清楚具体原理,相信水很深,如果哪位知道请告诉我。
    avrg /= num;
    return avrg;

}


void print_arg(int num,va_list arg){
    int i;
    char fmt[50];
    strcat(fmt,"args:");
    for(i=0;i<num;i++){
        strcat(fmt," %d");
    }
    strcat(fmt,"\n");
    vprintf(fmt,arg);//类似于printf,只不过arg是一个参数列表。
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值