有时传给函数实参的个数不是固定的,而是变化的。就需要编写变长参数表函数。
典型的函数就是 pirntf() 函数。
编写变长参数表函数
目标:编写一个Max函数,返回传入参数中的最大值。
从函数的四要素谈起:
- 返回类型
- 函数名
- 参数列表
- 函数体
返回类型和函数名与普通函数并无区别。
参数列表中,最后的参数用(…) 表示。可用若干个实参取代。
int Max(num, ...)
返回值是int 类型
第一个参数num表示要比较的整数的个数。
调用函数时,
Max(3, 11, 22, 33);
Max(5, 1, 3, 5, 7, 8);
都是合法的。
函数体
最后看一看函数体中该怎么实现。
#include <stdarg.h>
int Max(int num, ...)
{//返回参数中最大的一个
va_list ap;
int max = 0, aa;
va_start(ap, num);
for (int i = 0; i < num; ++i) {
aa = va_arg(ap, int);
if (max < aa)
max = aa;
}
va_end(ap);
return max;
}
变量ap 时变长参数表类型,该类型的定义在 stdarg.h中。所以要包含头文件stdarg.h
va_start(ap, num); 表示 ap 指向固定参数num后面的实参表