Va_list以及相关函数的使用方法。

本文深入解析了C语言中的Va_list及其相关函数,包括Va_start, Va_arg和Va_end的使用方法。通过实例代码展示了如何在函数中处理可变数量的参数,为读者提供了实用的编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Va_list以及相关函数的使用方法。

在头文件stdarg.h里面找到了关于这个几个函数的宏定义

#if  !defined(__STDARG)

#define __STDARG

typedef void    *va_list;

#define va_start(ap, parmN)   (ap = ...)

#define va_arg(ap, type) (*((type *)(ap))++)

#define va_end(ap)

#define _va_ptr                         (...)

#endif

Va_list:可以把这个理解成一个这是自定义的一个变量类型,这里是指针类型。

Va_start():这是一个初始化函数,初始化va_list修饰的变量。例如va_start(a,b);

这里的a就是va_list修饰的变量,b是传参函数的一个变量,不一定是第一个参数(从左至右)

。这个函数的用意是在运行va_start(a,b)以后,a指向第一个可变参数在堆栈的地址。

Va_arg():返回参数列表中指针a所指的参数,返回类型可以自定义,并使指针a指向参数列表中下一个参数。例如va_arg(a,char);返回指针a所指向的参数,参数类型为 char型。还有就是使a指向下一个参数。

va_end():使va_list修饰的变量作废。就如va_end(a);实则没有进行操作,可以理解成一种规范。在函数中随着函数的结束可以自动的释放掉。

下面附上对这个函数的使用代码:

main()

{

       showstr(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,0);

}

void showstr(char *m,...)        

{

       char *p;

       va_list a;  /*声明一个va_list类型的变量*/

       va_start(a,m);     /*初始化这个变量a,使之指向接收不定参的第一个,也就是m的下一个参参数*/

       do

       {

         printf("%s\n",m);

         m = va_arg(a,int);/*返回a地址所指的参数,并且使a指向下一个地址*/

       }while(m!=0);

       va_end(a);/*结束对变量的定义*/

}

(第一次发博客,希望可以帮到有需要的朋友)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值