C语言函数可变长参数应用
1.1 什么是可变长参数
可变长参数:顾名思义,就是函数的参数长度(数量)是可变的。比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的。下面是 printf 函数的声明:
int printf ( const char * format, ... );
可变参数函数声明方式都是类似的。
1.2 如何实现
C语言可变参数通过三个宏(va_start、va_end、va_arg)和一个类型(va_list)实现的,
void va_start ( va_list ap, paramN );
参数:
ap: 可变参数列表地址
paramN: 确定的参数
功能:初始化可变参数列表(把函数在 paramN 之后的参数地址放到 ap 中)。
void va_end ( va_list ap );
功能:关闭初始化列表(将 ap 置空)。
type va_arg ( va_list ap, type );
功能:返回下一个参数的值。
va_list :存储参数的类型信息。
好了,综合上面3个宏和一个类型可以猜出如何实现C语言可变长参数函数:用 va_start 获取参数列表(的地址)存储到 ap 中,用 va_arg 逐个获取值,最后用 va_arg 将 ap 置空。
1.3 举例
/* * c语言可变长参数案例 * va_arg_demo.c * Created on: Oct 10, 2016 * Author: zhangming */ #include <stdio.h> #include <stdarg.h> #define END -1 /** * 遍历打印可变参数 */ void va_list_args(char* first_str,...){ //(1)定义参数列表 va_list args; //(2)初始化参数列表 va_start(args,first_str); while(1){ char *arg = va_arg(args,char*); if(strcmp(arg,"end") == 0){ break; } printf("%s ",arg); } va_end(args); } main(){ va_list_args("begin","aaa","bbb","ccc","end"); }
运行结果: aaa bbb ccc

浙公网安备 33010602011771号