在日常写函数的时候有时候需要用到可变参数,然后学习了一下可变参数的使用。

先介绍三个函数与一个变量类型:使用这个库的前提是需要使用stdio.h 与stdarg.h

av_list类型:是一个char * 类型的字符串指针,

它用来指向我们参数的地址。

接下来我们介绍需要使用的三个函数。原型在下图中展示。

av_start(ap, x):是一个宏函数,ap应该就是args pointer  参数指针,x是第一个参数

执行start之后ap会自动偏移到第二个参数的地址。

av_arg(ap, t):t为参数类型,如果t是char 那么它会返回一个字符,如果是cahr*会返回字符串首地址,我们可以根据这个t来遍历,我们输入的format,对不同类型的数据进行处理,其实也可以用输入输出流格式化提取数据或者用正则表达式,但是遇到了就玩玩。

av_end(ap):将ap置为空,参数指针置为空。

下面随便写个例子玩玩。

#include <stdio.h>
#include <stdarg.h>
void myFormat(const char *fmt, ...)
{va_list arglist;//参数指针va_start(arglist, fmt);//指向第二个参数while(*fmt != '\0'){if(*fmt == '%')//格式化输出的符号{switch(*(++fmt)){case 'd':  printf("%d",(va_arg(arglist, int))); break;case 'c':  break;case 's':  printf("%s",(va_arg(arglist,char *))); break;case 'x':  break;default: printf("default");}}else {printf("%c",*fmt);}fmt++;}va_end(arglist);
}
int main(int agc,char * agv[])
{myFormat("%s%d\n","VA_ARG",888);return 0;
}

运行结果。

在单片机里面用的比较多吧。应用开发不怎么用。

使用<stdarg.h>实现可变参数,av_list的使用相关推荐

  1. C语言———不定参数标准库 stdarg.h

    前言: 在很多工程代码中,工程师考虑到后续软件设计的兼容性和扩展性,在接口函数中时常会使用一些可变参数.一开始全部考虑到这些很难,因为统筹全局需要经验和思考来支撑.C语言标准库<stdarg.h ...

  2. 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]

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

  3. getMethod方法getMethod(String name, Class<?>... parameterTypes)传入可变参数类型

    反射的getMethod方法getMethod(String name, Class<?>- parameterTypes) Class<?>- parameterTypes ...

  4. C++:函数参数不确定时用cstdarg(stdarg.h)

    ◎用法: func( Type para1, Type para2, Type para3, ... ) {       /****** Step 1 ******/       va_list ap ...

  5. C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)

    以Linux "man 手册"里的printf函数声明为例,谈谈我对C语言函数的可变参数的一点理解. printf的函数声明如下:int printf(const char *fo ...

  6. C 语言的可变参数类型 stdarg

    va_list/va_start/va_arg/va_end这几个宏,都是用于函数的可变参数的. 我们来看看在vs2008中,它们是怎么定义的: 1: ///stdarg.h2: #define va ...

  7. 探究C/C++可变参数

    C/C++支持可变参数个数的函数定义,这一点与C/C++语言函数参数调用时入栈顺序有关, 首先引用其他网友的一段文字,来描述函数调用,及参数入栈: ------------ 引用开始 -------- ...

  8. 省略号和可变参数模板

    1.基本概念 省略号在C/C++中有很多用途,包括函数的变量参数列表.C运行库的printf()就是常见示例. 可变参数模板提供了类型安全和灵活性,可应用于类模板和函数模板. 2.语法示例 templ ...

  9. 理解可变参数va_list、va_start、va_arg、va_end原理及使用方法

     参考: http://www.360doc.com/content/12/0309/10/4025635_192940551.shtml http://www.cnblogs.com/Annie ...

最新文章

  1. mysql根据时间取前后几秒,几分钟,几小时,几天,几月,几年
  2. 反编译工具jad简单用法
  3. JAVA 基本运算符(摘)
  4. iOS一些推荐的学习路径发展
  5. LeetCode 938. 二叉搜索树的范围和(二叉树遍历+搜索剪枝)
  6. 系统架构设计师 - 23种设计模式(GOF)
  7. python查找文件名_Python实现的根据文件名查找数据文件功能示例
  8. 数据可视化如何做会更好
  9. 使用dumpbin查看dll有哪些函数
  10. 第15周学习进度情况
  11. 4.23上海交大PMP试题每日一题
  12. 快速获取知网,万方,维普等永久性免费下载权限
  13. unity学习笔记(二)—— 制作第一个小游戏
  14. 分享5个制定市场营销神器
  15. 同盾科技声纹识别建模大赛
  16. jQuery手机触屏拖动滑块验证跳转插件
  17. PMOS和NMOS引脚及封装
  18. 07 list和dict for循环遍历索引问题以及深浅拷贝
  19. 冒泡排序MATLAB实现
  20. csdn博客误删恢复办法

热门文章

  1. 华为hicar支持车型列表_【企业】华为智选车载智慧屏将12月上市:有望搭载鸿蒙系统...
  2. 2022-2028全球硅胶疤痕凝胶产品行业调研及趋势分析报告
  3. 淘宝联盟API申请使用教程
  4. Python随机数判断
  5. 博弈论学习笔记(十)混合策略
  6. 语音识别技术:如何开启语音交互的新时代?
  7. Java 中 Executors.newSingleThreadExecutor() 与Executors.newFixedThreadPool(1)有什么区别
  8. 2021年中国医药行业发展现状及重点企业对比分析[图]
  9. 分享五个好用的自定义域名链接缩短平台,2023年测试可用
  10. 新手要怎么管理好公司档案?