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

被折叠的 条评论
为什么被折叠?



