在C语言中通过引用头文件#include<stdarg.h>可以实现可变参数的程序
求n个数的平均值函数:
#include<stdio.h>
#include<stdarg.h>
int average(int n, ...)
{
va_list arg;//char *arg;
int i = 0;
int sum = 0;
va_start(arg, n);//(arg=(char *)&n+4);
for (i = 0; i < n; i++)
{
sum += va_arg(arg,int);//sum+=(*(int*)((arg += 4) - 4))两步操作将n后面第一个参数赋值给sum这时arg已经指向后面一个参数
// #define __crt_va_arg(ap, t) (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))
}
va_end(arg);// #define __crt_va_end(ap) ((void)(arg = (char *)0))
return sum / n;
}
int main()
{
int ave = average(3,4,5,6);
printf("%d\n",ave);
int aver = average(4, 6, 7, 8, 9);
printf("%d", aver);
system("pause");
return 0;
}
其中va_list arg相当于定义一个指针。
va_start(arg, n)使指针指向已知变量n后面的一个变量。
sum += va_arg(arg,int):sum+=(*(int*)((arg += 4) - 4))两步操作将n后面第一个参数赋值给sum这时arg已经指向后面一个参数
va_end(arg);:使开始定义的指针为空。
同理求n个数的最大值:
#include<stdio.h>
#include<stdarg.h>
int MAX(int n, ...)
{
va_list arg;
int tmp = 0;
int max = 0;
int i = 0;
va_start(arg, n);
for (i = 0; i < n; i++)
{
tmp = va_arg(arg, int);
if (tmp> max)
max = tmp;
}
va_end(arg);
return max;
}
int main()
{
int max = MAX(3,4,5,6);
printf("%d",max);
system("pause");
return 0;
}