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

来源:互联网 发布:电脑手绘软件 编辑:程序博客网 时间:2024/06/14 08:30

可变参数列表是通过宏来实现的,这些宏定义于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 <iostream>#include <stdarg.h>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;}

程序结果:
这里写图片描述

0 0
原创粉丝点击