- 从平均数实现看可变参数列表
- 可变参数实现查找最大值
- printf函数实现
在我们平时的编码过程中,每当调用函数时基本都会给函数传入定量的且类型确定的参数,并且在函数设计时也会遵从这一习惯。但是真的每个函数都需要定量且类型确定的参数吗?答案一定是否定的。如果注意观察一定不难发现我们基本上每次编码都会使用到的printf就是一个典型的可变参数函数,本文的目的是通过一个简单的例子对可变参数列表进行学习,从而实现自己的printf函数。
从平均数实现看可变参数列表
以一个求平均数的函数为例,调用函数时向其传入不等数量的参数,看看结论如何。
#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);
}
return sum/n;
va_end(arg);
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int avg1 = average(2,a,b);
int avg2 = average(3,a,b,c);
printf("avg1 = %d\n",avg1);
printf("avg2 = %d\n",avg2);
return 0;
}
代码的逻辑并不难,只是对average函数的细节问题需要进行分析。
- 参数列表:average(int n,…) 列表中的int n并不难理解,代表一个整形的变量,其中存储的是所需传入参数的个数(这里并不包括n哦!)