C语言中编写可变参数函数
时间:2019-03-30
本文章向大家介绍C语言中编写可变参数函数,主要包括C语言中编写可变参数函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似:
void f1(int n,...);
其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似:
void f1(int n,...) { va_list ap; va_start(ap,n); //初始化参数列表 double first=va_arg(ap,double); //取第一个参数 int second=va_arg(ap,int); //取第二个参数 ... va_end(ap); //清理工作 }
看一个求和的例子:
#include < stdio.h > #include < stdarg.h > double sum( int , ); int main( void ) { double s,t; s = sum( 3 , 1.1 , 2.2 , 13.3 ); t = sum( 6 , 1.1 , 2.1 , 13.1 , 4.1 , 5.1 , 6.1 ); printf( " return value for " \ " sum(3,1.1,2.2,13.3): %g\n " ,s); printf( " return value for " \ " sum(6,1.1,2.1,13.1,4.1,5.1,6.1): %g\n " ,t); return 0 ; } double sum( int lim, ) { va_list ap; double total = 0 ; va_start(ap,lim); int i; for (i = 0 ;i < lim;i ++ ) total += va_arg(ap, double ); va_end(ap); return total; }
C语言对可变参数的使用还是有点麻烦,不如ruby和java简便。比如ruby中定义并使用可变参数参数:
def sum(*e) e.inject{|sum,i| sum+=i} end sum(1,2,3,4,5)=>15
- 王健林旗下万达网科被曝大裁员 总裁出面说话了
- lodash源码分析之缓存方式的选择
- 《物联网智能终端信息安全白皮书》发布
- SemCmsv2_4 Function_php文件过滤不严导致Sql注入
- Python为什么这么火?聆听Python之父诠释Python的精神和文化
- 阿里程序员2017年终总结:web前端最有效学习方法!让你少走弯路
- 《关于深化“互联网+先进制造业”发展工业互联网的指导意见》的系列解读 解读二:打造平台体系
- 2018最火的AI丶云计算丶大数据丶物联网丶量子计算五大热门之间的关系
- 人工智能或能帮助揭示永葆青春的秘密 寻减缓衰老药物
- 近百万的“荣耀”域名遭仲裁 两个终端的对决
- IT专业人员如何看待软件定义的数据中心市场
- 安正平:网络隐私保护不能止于关闭直播平台
- 摩拜与武汉地铁深度合作,网上买地铁票又多了一种渠道
- 从零推导神经网络之入门篇
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOs下手动升级node版本的方法
- 详述Linux中Firewalld高级配置的使用
- CentOS7安装PHP7 Redis扩展的方法步骤
- centos7下rsync+crontab定期同步备份
- 你可能不知道的一些linux文件权限管理方法
- 原来SqlSession只是个甩手掌柜?真正干活的是谁?
- Linux下的定时任务和延时任务的详解
- 使用 chkconfig 和 systemctl 命令启用或禁用 Linux 服务的方法
- Packetdrill的简明使用手册
- linux操作系统下配置ssh/sftp和权限设置方法
- linux把php升级到5.6的实操方法
- Linux sudo 漏洞可能导致未经授权的特权访问
- 在Linux中如何轻松删除源安装的软件包
- linux系统 java环境变量的配置方法
- Apache 文件上传与文件下载案例详解