一、定义

在C++中又函数重载功能,C语言中也是又类似功能的,如经常见到的  int fun(char *format, ... ),该函数的参数个数是未定的,以此实现了类似重载的功能,我们用的最多的printf() 函数就是这样实现的,现在来讲讲这个怎么用:
正如大家知道的那样,函数传入的参数是保存在栈中的,第一个参数在栈的最顶端,最后一个参数在栈的最底端,
对于函数void  fun(char *formt,...);进行调用fun("a","b","c","d","e","f","g");
va_list:复合类型,va_list  args;声明变量args,可以看作为一个指针
va_start(args, formt):将args指向第一个参数"a"
va_arg(args, 参数类型):args指向下一个参数
va_end(args):将args置为无效

二、使用

#include <stdarg.h>
#include <iostream>void fun(int a,...)
{va_list pp;int n=1;va_start(pp,a);do{printf("第 %d 个参数 =%d\n",n++,a);a=va_arg(pp,int);}while (a!=0);va_end(pp);
}int main()
{fun(20,40,60,80,0);return 0;
}

VA_LIST的用法: 
(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针; 
(2)然后用VA_START宏初始化变量刚定义的VA_LIST变量; 
(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数); 
(4)最后用VA_END宏结束可变参数的获取。

参考:

va_start()va_end()和vsnprintf()函数应用_算法随笔-CSDN博客

va_list使用方法_一个菜鸟-CSDN博客_va_list

C语言的va_list使用方法相关推荐

  1. 简单介绍C语言使用四种方法初始化结构体

    这篇文章说明了什么是结构体,介绍了结构体的概念和使用优点,在C语言中如何使用和初始化结构体方法,通过详细的代码展开进行说明,希望该篇文章对你有所帮助 什么是结构体 在实际问题中,一组数据往往有很多种不 ...

  2. C语言中常用计时方法总结

    转自:http://blog.csdn.net/fz_ywj/article/details/8109368 C语言中常用计时方法总结 1. time() 头文件:time.h 函数原型:time_t ...

  3. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  4. Windows Server 2012 R2/2016/2019无法安装.NET Framework 3.5.1或语言包的解决方法

    Windows Server 2012 R2/2016/2019无法安装.NET Framework 3.5.1或语言包的解决方法 参考文章: (1)Windows Server 2012 R2/20 ...

  5. Xamarin XAML语言教程通过ProgressTo方法对进度条设置

    Xamarin XAML语言教程通过ProgressTo方法对进度条设置 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo ...

  6. Swift2.0语言教程之类的方法

    Swift2.0语言教程之类的方法 Swift2.0语言的方法 方法其实就是函数,只不过它被定义在了类中.在Swift中,根据被使用的方式不同,方法分为了实例方法和类型方法两种.这两种方法的定义也和O ...

  7. C语言程序设计:现代方法(第2版)第三章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  8. c语言soket编程,C语言socket编程使用方法

    C语言socket编程使用方法 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.以 ...

  9. 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程

    本发明涉及评分领域及机器学习领域,它特别涉及一种基于随机森林的c语言源代码静态评分的构建方法. 背景技术: c语言源代码静态评分是指对根据一定的题目描述做出解答的c语言源代码进行评分.目前,主要流行的 ...

最新文章

  1. 多线程真的会使用CPU所有的内核吗?
  2. 创建虚拟环境 安装pytorch 0.3.1
  3. 早在公元前五百年,孙子就参透了数据库分区的真谛
  4. Tensorflow: 保存和复原模型(save and restore)
  5. 「Newcoder练习赛40D」小A与最大子段和
  6. unity3d 700种 材质球_温度与耐磨钢球的关系
  7. Cookie与Session相关学习笔记
  8. wp7开发第一课:软件生命周期(其一)
  9. HibernateCRUD基础框架(1)-实体类
  10. 【QA】揭开知识库问答KB-QA的面纱1·简介篇
  11. 苹果Mac 3D 数字绘画工具:Substance 3D Painter
  12. AndroidManifest.xml详解(service)
  13. 用拼音输入法字典库实现同音字模糊查询
  14. 可能是史上最全的权限系统设计
  15. NDK之FFmpeg视频解码
  16. linux local root exploit,Linux非交互环境下本地提权思路与反思 linux localroot exploit
  17. 从帝王之术中窥探天机
  18. 港科百创 | 决赛成功举办!2021香港科大商学院-国科京东方人工智能百万奖金国际创业大赛在北京圆满收官!...
  19. java 鼠标动眼睛动_java实现眼睛跟着鼠标转动的跟踪眼代码
  20. 2016年蓝桥杯C++ A组初赛试题

热门文章

  1. 什么是数字化?企业如何实现数字化?
  2. C语言中的带参宏和带参函数的区别
  3. SQL数据库质疑怎么解决呢?
  4. APP项目开发失败案例经验汇总
  5. 盛天海电商:拼多多活动怎么去定位?
  6. poj1639 Picnic Planning 最小度数限制生成树
  7. maven添加sqljdbc4.jar,并引用
  8. 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)
  9. 以太网帧格式 IP数据报格式 TCP数据报格式 MTU MSS
  10. 算法导论中英文版下载