关于可变参数列表stdarg
Posted 唯一诺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于可变参数列表stdarg相关的知识,希望对你有一定的参考价值。
1.对于可变参数
可变参数列表通过stdarg.h中的宏实现;
主要有一个va_list类型
三个宏:va_start,va_arg,va_end;
va_start格式:
va_start(argument1,argument2);
其中argument1是一个va_list,定义的变量;
argument2是“...”省略号前的最后一个有名字的参数;
va_arg格式:
va_arg(argument1,argument2);
其中argument1是一个va_list,定义的变量;
argument2是下一个参数的数据类型:int,char,float等;
va_end格式:
va_end(argument);
其中argument是一个va_list,定义的变量;
举例:
#include <stdio.h> #include <stdarg.h> float average(int nbytes,...) { int i = 0; int sum = 0; va_list list; va_start(list,nbytes); for(i = 0;i < nbytes;i++) { sum += va_arg(list,int); } va_end(list); return sum / nbytes; } int main(void) { float result = 0; result = average(4,22,1,2,1,10); printf("%f\n",result); return 0; }
注意:
使用这些宏存在两个基本的限制:
1.这些宏无法判断实际存在的参数的数量;
2.这些宏无法判断每一个参数的类型;
因此:
我们必须使用命名参数;
在上例中,命名参数指定了实际传递的参数数量;并且类型被假定为整型;
以上是关于关于可变参数列表stdarg的主要内容,如果未能解决你的问题,请参考以下文章