您的位置:首页 > 编程语言 > C语言/C++

C语言可变参数列表编程

2015-11-29 22:19 274 查看
最近在看一份代码,想定义一些自己的打印信息。但是其中涉及到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是一个参数列表。
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C