深入浅出-变长参数

变长参数


#include<stdarg.h>    //变长参数所需头文件


va_list v;   //定义一个可变长参数的列表

va_start(v,cnt);  //将所有的参数保存到va_list中,并把参数个记录在cnt中;cnt是接收函数的第一形参

变量=va_arg(v,数据类型);   //从va_list中取出第一个参数赋值给变量,变量的数据类型必须和参数的数据类型一致

va_end(v);  //释放可变长参数列表


-------------------------实例


#include<stdio.h>
#include<stdarg.h>

int max(int cnt,...);

int main()
{
printf("%d ",max(3,15,24,18));
printf("%d ",max(5,15,51,18,23,16));
printf("%d ",max(10,15,24,18,52,123,14,57,48,62,31));
return 0; 
}

int max(int cnt,...)   // '...' 代表可变数目形参列表,也就是说调用该函数的时候可以传递不定数目的实参
{
va_list v;        //声明一个va_list类型的变量,用来保存参数
va_start(v,cnt);  //va_list指向第二个参数,并且参数的个数被cnt记录(cnt可以记录最后一个参数的位数)
int i;
int maxvalue=va_arg(v,int);  //从va_list中取出第一个参数赋值给maxvalue
for(i=1; i<cnt; i++)
{
int data =va_arg(v,int);    //从va_list中取出一个参数赋值给data,int是说明参数的数据类型
if(data>maxvalue)        //进行判断
maxvalue = data;
}
va_end(v);        //.释放va_list
return maxvalue;  //返回一个值给max函数
}

说明:该函数作用是求最大值,所以要把最大值(比较的结果)返回给调用处

原文地址:https://www.cnblogs.com/Munu-Laboratory/p/3177019.html