|
#include<stdarg.h>//可变参数
double sum(int lim, ...);
/*
1.提供一个使用省略号的函数原型
2.在函数定义中创建一个va_list类型的变量
3.用宏把该变量初始化为一个变量列表
4.用宏访问参数列表
5.用宏完成清理工作
这种函数原型,应该有一个形参列表,至少一个形参和一个省略号,之间用逗号隔开
且省略号前一个形参起着特殊作用,用parmN术语描述该形参
列如:
int fi(int bsv,int l,...);中parmN为l,传递给该形参的实际参数是省略号部分代表的形参
数量,若l==3,则fi(34,3,45,567,56);
而stdarg.h库中va_list类型代表的是一种用于储存形参对应的形参列表省略号部分的数据对象。
double sum(int lim,...)
{
va_list ap;//声明一个存储参数的对象。
}
接下来使用<stdarg.h>库中的va_start();宏把ap初始化为形参列表。
double sum(int lim,...)
{
va_list ap;//声明一个存储参数的对象。
va_start(ap,lim);
}
下一步是访问参数列表的类容,以及需要使用的另一个宏,va_arg();接受va_list类型的变量和一个类型名,返
回va_arg()宏检索的参数的值,
double sum(int lim,...)
{
va_list ap;//声明一个存储参数的对象。
va_start(ap,lim);
double s1=va_arg(ap,double);
char s2=va_arg(ap,char);
}
最后是使用<stdarg.h>库中的va_end();宏释放动态分配,用于存储参数的内存。
double sum(int lim,...)
{
va_list ap;//声明一个存储参数的对象。
va_start(ap,lim);
double s1=va_arg(ap,double);
char s2=va_arg(ap,char);
va_end(ap);//调用后只有使用va_start();重新初始化ap后才能使用变量ap.
}
//va_arg();不提供退回之前参数的方法,所以需要保存va_list类型变量的副本,可以用va_copy();宏接受两个
va_list();变量作为参数,把第二个参数拷贝给第一个参数。
*/
double sum(int lim, ...)
{
va_list ap;
double too = 0;//声明一个对象存储参数。
int i = 0;
for (i; i < lim; i++)
{
too = too + va_arg(ap, double);
}
va_end(ap);
return too;
}
|
上一篇: 用VC6绘制心型下一篇: 字符串查找
|