C 可变长实参列表

在可变实参头文件<stdarg.h>中的宏和定义,为创建一个可变长实参列表的函数提供了必须的功能

va_list 该类型适合于保存宏va_start,va_arg和va_end所需的信息。为了访问到一个可变长实参列表中的实参,必须声明一个类型为va_list的对象

va_start 在一个可变长实参列表中的实参被访问之前,先要调用这个宏。这个宏的功能室:初始化用va_list声明的对象,以便让宏va_arg和va_end来使用

va_arg 这个宏展开成一个表示可变长实参列表中下一个实参的值和类型的表达式。每次对va_arg的调用都要修改用va_list声明的对象,以使这个对象指向列表中的下一个实参

va_end 当一个函数的可变长实参列表是通过宏va_start来引用时,宏va_end可用于从这样的函数中正常返回

eg:

#include "stdio.h"
#include "stdarg.h"

double average(int i,...);

int main(void)
{

    printf("%f",average(2,32.3,22.3));

    getchar();
    return 0;
}

double average(int i,...)
{
    int j;
    double total = 0;
    va_list ap;//存储宏(以符号形式表达的操作)va_start 和 va_end所需的信息

    va_start(ap,i);//初始化va_list对象 ,i是来判断可变长实参列表从哪里开始

    for(j=0;j<i;j++){
        total += va_arg(ap,double);//返回实参列表中的数据,第二个参数是期望返回的数据类型
    }

    va_end(ap);//使函数正常返回

    return total/i;
}
原文地址:https://www.cnblogs.com/ShowJoy/p/3594310.html