天天看点

C语言的va_list使用方法

一、定义

在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;
}
           
C语言的va_list使用方法

 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

上一篇: va_list函数

继续阅读