c中可变参数学习

本文详细介绍了C语言中可变参数的三个关键函数:va_start、va_arg和va_end,通过具体代码实例展示了如何在C函数中灵活运用这些函数来处理不确定数量的参数。

c中可变参数的三个函数va_startva_arg以及va_end都是定义在va_arg头文件中,三个函数中比较重要的是va_arg函数。

类型 va_arg(va_list ap, 类型)va_arg函数带返回值,它从可变参数列表中获取第一个可变参数,然后修改ap使va_arg下一次的使用可以获取后面的参数。

但是在使用va_arg函数之前需要对ap指针进行初始化,利用va_start函数使ap指向第一个参数的内存位置。va_end函数则是用来回收ap指针,使其为空指针。

简单的c函数代码如下:

#include<stdio.h>
#include <stdarg.h>

void print_va(int n,...)
{ va_list va_pt; //定义可变参数

int va_count=0; //用于计算可变参数的个数
int va_value=n;
va_start(va_pt,n); //
使变参va_pt指向第一个参数的内存地址
va_value=va_arg(va_pt,int); //将下一个可变参数的值赋值给va_value
do
{ va_count++;
printf("the %d number is %d",va_count,va_value);
va_value=va_arg(va_pt,int);

}while(va_value!=-1);

va_end(va_pt); //va_pt置为NULL
}

void main()
{
print_va(2,20,30,-1);
print_va(3,80,100,200,-1);

}

其实,上述三个函数只是一个宏而已

#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )

#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

#define va_end(ap) ( ap = (va_list)0 )

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值