一、定义
在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