可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件中,是标准库一部分,这个头文件声明一个类型va_list和三个宏va_start,va_arg和va_end
声明va_list 类型变量arg,用于访问参数列表未确定部分,用va_start来初始化,它的第一个参数是va_list的变量名,第二个是省略号前最后一个有名字的参数。初始化吧arg变量设置为指向可变参数部分的第一个参数
va_arg,接受两个参数,va_list变量和参数列表中下一个参数的类型。返还参数值并指向下一个可变参数
va_end访问完最后一个可变参数后调用
//求平均值
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
int my_average(int count, ...)
{
va_list arg;//char*类型
int sum = 0;
va_start(arg, count);
int i = 0;
for (i = 0; i < count; i++)
{
sum += va_arg(arg, int);//向后获取一个整形变量
}
va_end(arg);
return sum / count;
}
int main()
{
int avg = my_average(3, 7, 2, 3);
printf("%d\n", avg);
system("pause");
return 0;
}例二
//求最大值
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
int my_max(int n, ...)
{
va_list arg;
va_start(arg, n);
int max = 0;
int i=0;
max = va_arg(arg, int);
for (i = 1; i < n; i++)
{
int tmp = va_arg(arg, int);
if (max < tmp)
{
max = tmp;
}
}
va_end(arg);
return max;
}
int main()
{
int ret = my_max(3, 2, -4, 1);
printf("%d", ret);
system("pause");
return 0;
}本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1716926
原文地址:http://10797127.blog.51cto.com/10787127/1716926