通过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

编写可变参数函数 c语言,C语言中编写可变参数函数相关推荐

  1. C语言——选择控制结构 寻找中位数v1.0编写一个函数返回三个整数中的中间数。函数原型:int mid(int a, int b, int c);功能是返回a,b,c三数中大小位于中间的一个数。

    寻找中位数v1.0 编写一个函数返回三个整数中的中间数. 函数原型:int mid(int a, int b, int c); 功能是返回a,b,c三数中大小位于中间的一个数. 程序运行结果示例1: ...

  2. R语言数据框中的stringsAsFactors参数

    R语言数据框中的stringsAsFactors参数 数据框基本建立 参数:stringsAsFactors 数据框基本建立 (注:本文章中的Name变量区分大小写) Name <- c(&qu ...

  3. matlab如何输出一个函数的图像,在matlab中如何输出一个函数的图像

    点击查看在matlab中如何输出一个函数的图像具体信息 答:A. imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread('filename','fmt')其 ...

  4. 为了避免360等浏览器的页面缓存影响到系统的参数,可以在对应页面中添加随机参数。

    为了避免360等浏览器的页面缓存影响到系统的参数,可以在对应页面中添加随机参数. 如window.open('text.aspx?rid='+ Math.round(Math.random() * 1 ...

  5. c语言 swap交换函数_重审C中老生常谈的swap函数交换数值

    概览 本文内容是关于C语言参数传值,以及x86底层实现的计算机科学. 包含了原理速览以及代码示例. 引言 如果你学习过C,可能会对经典的swap函数问题记忆深刻.简单的参数传值并不能在函数外部完成两个 ...

  6. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

  7. java 自定义函数的调用_Java/Android中的函数调用回调函数自定义回调函数

    在做Android自定义控件时遇到要自定义回调函数的问题,想想自己还暂时没有那么精深的技术,赶紧返过头回来再重新研究Java中回调函数的问题.然而不幸的是,网上太多杂乱的帖子和博客都是转来转去,而且都 ...

  8. python中求和公式是什么函数_Python的math库中,用于求和的函数是( )。

    [单选题]确定兴利库容 V 兴 ,已知某水库为一回运用水库,其一次蓄水量为 V 1 =300 万 m 3 ,一次供水量为 V 2 =150 万 m 3 . [ ]. [单选题]hAB大于0说明B点的高 ...

  9. 用PHP编写圆的半径和周长,在C++中编写程序输入半径计算圆的周长和面积

    现在计算机语言应用是很多的,如果你使用电脑又会使用计算机语言那就是更加的吃香了,今天我们就来说说C语言,在C++中编写程序输入半径计算圆的周长和面积. 工具/材料 电脑.VC++软件 我们首先要下载安 ...

  10. python 超参数_完整介绍用于Python中自动超参数调剂的贝叶斯优化

    完整介绍用于Python中自动超参数调剂的贝叶斯优化-1.jpg (109.5 KB, 下载次数: 0) 2018-7-4 23:45 上传 调剂机器学习超参数是一项繁琐但至关重要的任务,因为算法的性 ...

最新文章

  1. android不调用系统发送短信,android之两种方式调用短信发送接口
  2. 第六回严重鄙视360安全卫士
  3. origin数据平滑_独门绝技!Origin挑战绘制细胞分化轨迹热图
  4. 混淆工具Dotfuscator基本使用
  5. Linux权限中的大写s,Linux文件权限、用户、组、文本实操二
  6. 【机器学习】最简单易懂的行人检测功能实现
  7. 支付业务流程图--扫码付
  8. research meeting updates points
  9. 工作154:代码之解析position 解决
  10. 尼康相机报错err_数码相机遇到这12种错误,自己动手就能解决,再不用找人维修...
  11. 银河麒麟通过命令行安装软件没有安装上
  12. Spark On YARN内存分配
  13. Latex排版大括号让其左对齐
  14. JAVAWEB-NOTE01
  15. 九章算法 | 苏州微软面试题:程序检查
  16. Lua 5.1.3源代码分析之词法分析[1]
  17. vue通过点击按钮弹出新窗口打开html文件
  18. Android开发——使用Jword生成本地word文档
  19. 计算机用户名更改不了,分享简单几步解决win10电脑用户名改不了的问题
  20. FLEX提高篇--------ShareObject对象详解

热门文章

  1. 【Rsync + inotify】 实时同步远程服务器目录文件
  2. 5、MySQL通用查询日志(General Query Log)
  3. 16、子查询改写为表连接
  4. MySQL读写分离中间件解决
  5. 离散数学及其应用傅彦pdf_《离散数学及其应用》第一章 计算机课题
  6. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...
  7. 你还在使用 try-catch-finally 关闭资源?不太优雅~
  8. Qt creator 编译错误 :cannot find file .pro qt
  9. struts2教程(10)
  10. 映射文件xxx.hbm.xml下的各元素结构