可变参数列表是通过宏来实现的,这些宏定义于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