C和指针-3


函数

可变参数列表

stdarg.h中的stdarg宏实现可变参数列表,它是标准库的一部分。这个头文件声明类型 va_list 和三个宏 va_start\va_arg\va_end .

示例:

#include <stdarg.h>

float average(int n_values, ... )
{
    va_list var_arg; //va_list 类型变量,用于访问参数列表的未确定部分
    int count;
    float sum = 0;

    va_start(var_arg, n_values);
    //使用 va_start 初始化 va_list 变量,第一个参数为 va_list 变量名
    //第二个参数是省略号前最后一个有名字的参数 
    //初始化过程把 var_arg 变量设置为指向可变参数的部分的第一个参数

    for(count = 0; count < n_values; count++)
    {
        sum += va_arg(var_arg, int);
        //使用 va_arg 宏获取变量,第一个参数是 va_list 变量,第二个参数是参数列表下一个参数的类型
        //本例中参数都是 int 类型
        //某些函数中,需要通过前面获得的数据来判断下一个参数的类型(如 printf())
        //va_arg 返回这个参数的值, 并使 var_arg 指向下一个可变参数
    }

    va_end(var_arg);
    //访问完最后一个可变参数后,需要调用va_end

    return sum / n_values;
}
  • 分享:
评论
还没有评论
    发表评论 说点什么