#include stdarg.h //可变参数函数必要的头文件
10年积累的成都做网站、成都网站建设、成都外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有和静免费网站建设让你可以放心的选择与我们合作。
#include stdio.h
long int sum(unsigned int argc,...) //可变参数函数必须包含至少一个确定的参数
{
long int srt=0;
int va;
unsigned int i;
va_list vl; //用于指向可变参数列表
va_start(vl,argc); //初始化,va_start()调用的第一个参数是所编写的可变参数函数的最后一个确定的参数
for (i = 0; iargc; i++) {
srt+=(int)va_arg(vl,int); //从参数列表按提取一个int类型的值参与相加运算
}
va_end(vl); //清理
return srt;
}
int main(int argc, char* argv[])
{
printf("%ld\n",sum(3,1,2,3));
return 0;
}
定义如下:
函数返回值 函数名(形参1, 形参2, ...)
举例说明:
int func(int a, int b, ...)
{
//函数体
......
}
printf()函数就是一个参数可变的函数,其函数原型为:
int printf (const char *__format, ...);
C语言中可变参函数实现,主要通过VA_LIST宏及相关操作的几个宏。
一、涉及宏及说明:
所有相关宏均定义在stdarg.h中。
1、va_list: 可变参数列表指针。
2、va_start:获取可变参数列表的第一个参数的地址。
3、va_arg:获取可变参数的当前参数,返回指定类型并将指针指向下一参数。
4、va_end:清空va_list可变参数列表。
可变参函数的实现,就是这四个宏的使用。
二、代码举例:
在实际应用中,经常有获取若干个数最大值的情况,当数量比较大的时候,一般通过数组实现,但个数不多时,一般写一个max函数。 常规写法都是用到几个数的max,就写几个参数, 对此可以实现一个可变参数函数,第一个参数指定共计有多少数据,后续各个参数为要比较的值。
#include stdio.h
#include stdarg.h
int max(int n, ...)//可变参数函数。
{
int r,i;
va_list ap;//定义可变参数。
if(n == 0) return -1;//异常参数。
va_start(ap, n);//得到起始点。
for(i = 0; i n; i ++)
{
int v=va_arg(ap,int) ;//获取下一个参数值。
if(i == 0) r=v;
else if(rv) r=v;
}
va_end(ap);//结束可变参数。
return r;//返回结果。
}
可以用如下主函数测试:
int main()
{
printf("%d\n",max(1, 1));
printf("%d\n",max(2, 2,1));
printf("%d\n",max(3, 5,9, 4));
printf("%d\n",max(4, 8 , 3,1,9));
return 0;
}
分别测试了1,2,3,4个数值,求取最大值的情况。
测试结果:
1
2
9
9