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

程序结果:

《C和指针》——stdarg宏简介相关推荐

  1. 函数指针与宏的简单应用

    函数指针与宏的简单应用 加减法例子 当遇到一族结构相同(参数和返回值相同),功能相关的函数时,可以利用函数指针和宏进行简化,举一个简单的例子: #define helper(fname) int fn ...

  2. C语言 第八章 函数、指针与宏

    一.函数 函数是一个包含完成一定功能的执行代码段.我们可以把函数看成一个"黑盒子", 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的.外部程序 ...

  3. C++中的函数指针与宏函数总结

    1.函数指针 今天看项目代码才发现,函数指针分两种:普通函数指针,类成员函数指针. 那这两中函数指针的定义方法是不一样的. 1.1.普通函数指针 typedef void (*Dfun) (float ...

  4. 《C和指针》——宏中容易出现的错误

    宏 #define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏( defined macro) .下面是宏的声明方式: #define name(parame ...

  5. 百度CEO 李彦宏 简介

    李彦宏 [个人档案] 1991年毕业于北京大学信息管理专业,随后赴美国布法罗纽约州立大学完成计算机科学硕士学位.在搜索引擎发展初期,李彦宏作为全球最早研究者之一,最先创建了ESP技术,并将它成功的应用 ...

  6. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  7. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  8. C和指针 (pointers on C)——第七章:函数(上)

    第七章 函数 这一章对于有一定C的基础的人有一定优秀代码风格的人来说,并非非常虐.关于stdarg宏可能有些陌生.它负责可变參数列表的定义. 总结: 新式风格和旧式风格就不要提了.八百年前的事情. 函 ...

  9. 《C和指针》阅读笔记

    <C和指针> Kenneth著 文章目录 1.快速上手 警告与总结 编程提示的总结 2.基本概念 2.1 环境 2.1.1 翻译环境 2.1.2 执行环境 2.2 词法规则 三字母词 3. ...

最新文章

  1. phpmailer 私密抄送_使用 phpmailer 发送邮件,支持抄送、密送和发送附件
  2. xpath 简单小记
  3. c语言mergesort 参数,归并排序C语言兑现MergeSort
  4. 边缘计算白皮书_区块链+边缘计算技术白皮书(2020年)
  5. 2018 推荐系统总结
  6. 【转】博客美化(5)为博客或系统添加一个强大的评论系统
  7. 冒泡法解决Jquery 下radio和checkbox的提交空值检查问题
  8. The Robustness of Deep Networks A geometrical perspective论文解读
  9. 20145205 《信息安全系统设计基础》第1周学习总结
  10. python贴吧数据可视化_Python数据可视化
  11. IDEA设置SQL格式化(关键字大写)
  12. starup_stm32f10x_hd.s的作用
  13. UE4 四叉树 QuadTree
  14. 练习7-9 计算天数(15 分)
  15. c语言第五次作业-指针-总结博客
  16. 使用接口实现打印机功能
  17. 软文发稿推广要怎么做?
  18. 使用python求解特征值与特征向量
  19. 电子白板无法触摸怎么办?
  20. 基于《ros机器人开发实践》的学习,ros建图,机器人导航

热门文章

  1. hbase原理与实践_JAVA连接HBase客户端及HBase写入数据和读取数据原理解析
  2. shell正则表达式去除注释行
  3. javascript 判断字符串是否包含某字符串(indexOf)
  4. [Unity] GameFramework 学习记录 6:计时器
  5. 高端大气上档次的官网介绍导航页源码
  6. php windows 下载,PHPForWindows官方下载_PHPForWindows最新版_PHPForWindows7.2.1官方最新版-华军软件园...
  7. 月老盲盒小纸条微信云开发小程序源码
  8. 卡通自适应网址发布页源码
  9. 博客系统。集成调试平台,支持类结构/jar结构预览、支持方法调试和监听、支持修改类字段(变量、常量、枚举)等
  10. java windows编程,以编程方式控制Windows媒体播放器,最好是从Java