VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 293|回复: 1

[交流] c语言可变参数

[复制链接]
37_avatar_middle
最佳答案
0 
在线会员 发表于 2020-3-18 15:47:14 | 显示全部楼层 |阅读模式
#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绘制心型
下一篇:字符串查找
74_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-27 23:03:01 | 显示全部楼层
看不懂哦。         
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-26 06:44

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表