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;
}

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值