File : variable list.cpp
Type : c/c++
Brief : variable list
#include <iostream>
#include <stdlib.h>
#include <stdarg.h>
using namespace std;
/**
 **通过 va_list变量,va_start、va_arg、va_end宏 实现可变参数访问
 **可变参数的 函数,入栈顺序都是 从 右 往 左
 ** printf("%d,%d,%d",a++,++b,a+b)中先计算a+b
 **/
float average(int n_values,...)
{
    va_list argPtr; /*列表指针argPtr用于访问未确定的可变参数*/
    int count;
    float sum = 0;
    /*准备访问可变参数*/
    va_start(argPtr,n_values);
        /*用va_start初始化var_arg为可变参数的第一个参数;
         *使用va_start至少需要一个命名参数,这里有n_values;
         */
    /*添加取自可变参数列表的值*/
    for(count = 0; count < n_values; count++)
    {
        sum += va_arg(argPtr, int);
            /*用va_arg返回var_arg的值,并使var_arg指向下一个可变参数;
             *需要指定正确的可变参数类型,这里指定为int型;
             *需要判断可变参数的数量,这里用n_values说明;
             */
    }
    va_end(argPtr); /*最后一个可变参数要调用va_end*/
    return sum / n_values;
}
int main(void)
{
    cout << average(5,2,3,4,5,6);
    return 0;
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [ yehuohan@gmail.com ]