首先举出一个简单的例子:实现可变参数求平均值函数 average
<span style="font-size:18px;">#include<stdio.h>
#include<stdarg.h>
int average(int n,...)
{
va_list arg;
int i = 0;
int sum = 0;
va_start(arg,n);
for(i=0; i<n; i++)
{
sum += va_arg(arg,int);
}
va_end(arg);
return sum/n;
}
int main()
{
int ret=0;
ret = average(5,1,2,3,4,5);
printf("%d\n",ret);
system("pause");
return 0;</span>
<span style="font-size:18px;">}</span>
可变参数头文件
<strong><span style="font-size:24px;"> #include<stdarg.h></span></strong>
该头文件中定义了几个比较重要的宏
<span style="font-size:24px;">va_list
va_start()
va_arg()
va_end(arg)</span>
va_list是一个字符指针,即为char *
va_start(arg,n)表示对arg进行初始化,用于获取可变参数列表中可变参数的首指针
va_arg(arg,int)用于获取当前arg指向的可变参数并将指针指向下一个可变参数
va_end(arg)用于结束对可变参数的处理
在自定义的函数中,形式参数
第一个参数表示总数量
第二个参数...表示参数个数没有限制
实现可变参数函数:Max,求最大值
<span style="font-size:24px;">#include<stdio.h>
#include<stdarg.h>
int Max(int n,...)
{
va_list arg;
int i = 0;
int max = 0;
va_start(arg,n);
max = va_arg(arg,int);
for(i=1; i<n; i++)
{
int a = va_arg(arg,int);
if(max<a)
{
max=a;
}
}
va_end(arg);
return max;
}
int main()
{
int ret = 0;
ret = Max(5,0,1,2,3,4,5);
printf("%d\n",ret);
system("pause");
return 0;
}</span>