《C和指针》——stdarg宏简介

可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型 va_list 和三个宏—— va_start、va_arg 和 va_end。我们可以声明一个类型为 va_list 的变量,与这几个宏配合使用,访问参数值。
函数声明了一个名叫 var_arg 的变量,它用于访问参数列表的未确定部分。这个变量通过调用 va_start 来初始纶。它的第1个参数是 va_list 变量的名字,第2个参数是省略号前最后一个有名字的参数。初始化过程把 var_arg 变量设置为指向可变参数部分的第1个参数。
为了访问参数,需要使用 va_arg ,这个宏接受两个参数:va_list 变量和参数列表中下一个参数的类型。下面这个例子中,所有的可变参数老师整型。在有些函数中,可能要通过前面获得的数据来判断下一个参数的类型。va_arg返回这个参数的值,并使 var_arg 指向下一个可变参数。
最后,当访问完毕最后一个可变参数之后,我们需要调用 va_end。

程序示例:

#include 
#include 

using namespace std;

float average(int n_values, ...){
    va_list var_arg;
    float sum = 0; 
    //准备访问可变参数
    va_start(var_arg, n_values);
    //添加取自可变参数列表的值
    for (int count = 0; count < n_values; ++count){
        sum += va_arg(var_arg, int);
    }
    //完成处理可变参数
    va_end(var_arg);
    return sum / n_values;
}

int main(){
    int n_values = 6;
    cout << average(6, 1, 2, 3, 4, 5, 6) << endl;

    return 0;
}

程序结果:
《C和指针》——stdarg宏简介_第1张图片

你可能感兴趣的:(C/C++,《C和指针》,C++常用概念)