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

在日常写函数的时候有时候需要用到可变参数,然后学习了一下可变参数的使用 。
【使用<stdarg.h>实现可变参数,av_list的使用】先介绍三个函数与一个变量类型:使用这个库的前提是需要使用stdio.h 与.h
类型:是一个char * 类型的字符串指针,
它用来指向我们参数的地址 。

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

文章插图
接下来我们介绍需要使用的三个函数 。原型在下图中展示 。
(ap, x):是一个宏函数,ap应该就是args参数指针,x是第一个参数
执行start之后ap会自动偏移到第二个参数的地址 。
(ap, t):t为参数类型,如果t是char 那么它会返回一个字符,如果是cahr*会返回字符串首地址,我们可以根据这个t来遍历,我们输入的,对不同类型的数据进行处理,其实也可以用输入输出流格式化提取数据或者用正则表达式,但是遇到了就玩玩 。
(ap):将ap置为空,参数指针置为空 。
下面随便写个例子玩玩 。
#include #include 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;}
运行结果 。
在单片机里面用的比较多吧 。应用开发不怎么用 。