stdarg.h 详解

stdarg.h

简介

stdargstandard argument 简化而来,该头文件的主要目的为让函数能够接受可变参数

该头文件中声明了一个类型 va_list 和三个宏函数 va_startva_argva_end

数据类型(Types):

数据类型
va_list用来保存宏 va_arg 与宏 va_end 所需信息。

宏函数(Macro functions):

宏函数功能
va_start初始化一个可变参数列表
va_arg获取下一个参数
va_end结束使用可变参数列表
va_copy (C++ 11 only)复制一个可变参数列表

va_start

  • 原型:void va_start (va_list ap, paramN);

  • 功能:初始化一个可变参数列表

  • 参数:第一个参数 ap 接受一个 va_list 变量,第二个参数 paramN 接受函数传入参数中的可变参数前的最后一个有名字的参数

va_arg

  • 原型:type va_arg (va_list ap, type);

  • 功能:获取可变参数列表中的下一个参数

  • 参数:第一个参数 apva_list 变量,第二个参数 type 指明下一个参数的类型。

va_end

  • 原型:void va_end (va_list ap);

  • 功能:结束使用可变参数列表

  • 参数:ap 接受一个结束访问的 va_list 变量。

va_copy ( C++11 only )

  • 原型:void va_copy (va_list dest, va_list src);

  • 功能:产生一个可变参数列表的副本

  • 参数:第一个参数 dest 为目标可变参数列表,第二个参数 src 是源可变参数列表。

实例

#include <stdio.h>
#include <stdarg.h>

double average(int n,...){
    double sum = 0;
    va_list args; // 声明一个 va_list 类型的变量 args
    //va_list v2;
    va_start(args, n); // 通过调用 va_start 来初始化这个 args
    //va_copy(v2, args); // 复制操作
    for(int i = 0; i < n; i++){
        sum += va_arg(args, int); // 通过调用 va_arg 获取下一个参数
    }
    va_end(args); // 释放 va_list 变量
    return sum / n;
}

int main(){
    printf("%.2lf", average(4, 1.0, 2.0, 3.0, 4.0));
    return 0;
}
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值