变参函数
实现可变参数max_int, 从若干传入的参数中返回最大值。
int max_int(int a, …);
如何获得a往后的参数列表? va_list 类型的变量
如何定位a后面的第一个参数的位置?va_start 函数
如何获取下一个可变参数列表中的参数?va_arg函数
如何结束整个获取可变参数列表的动作? va_end函数
使用实例
#include <stdio.h>
#include <inttypes.h>
#include <stdarg.h>
int max_int(int n, ...) {
int ans = INT32_MIN;
va_list arg; // 定义变参列表
va_start(arg, n);
while(n--) {
int temp = va_arg(arg, int); // 类型作为参数,是一个宏定义。获取下一个int型的变参
ans = ans >= temp? ans : temp;
}
va_end(arg); // 使用完以后,销毁变参
return ans;
}
int main() {
printf("%d\n", max_int(3, 1, 5, 10));
printf("%d\n", max_int(2, 1, 3));
printf("%d\n", max_int(6, 1, 3, 5, 7, 9, 10)); // 参数个数要相同,否则可能会有控制之外的结果
return 0;
}