摘自《c语言精彩编程百例》,要定义可变参数的函数,在c++当中当包含<cstdarg>,在c语言当中当包含<stdarg.h>,使用任何可变长度的变元被访问之前,必须先用va_start()初始化变元指针argptr,argptr用va_list宏类型定义。初始化argptr后,经过va_arg()的调用,以作为下一个参数类型的参数类型,返回参数,最后取完所有参数并从函数返回之前,必须调用va_end()。如果未正确使用va_end(),程序可能瘫痪

#include<iostream>

#include <cstdarg>

using
namespace std;

double sum_series(int num,
...);

int main()

{

double
d;

//在子函数实际调用中共有五个参数,第一个为序列个数,其后为相加的各个数

d
= sum_series(4, 0.5, 0.25, 0.125, 0.06254);

cout <<
"Sum of series is " << d
<< endl;

return
0;

}

double sum_series(int num,
...)

{

double
sum = 0.0, t;

va_list argptr;            //定义参变量

//初始化argptr

va_start(argptr,
num);

//计算序列之后

for
(; num;num--)

{

t
va_arg(argptr, double);

sum +=
t;

}

va_end(argptr);            //序列关闭

return
sum;

}

可变参数的函数(c++)【转载】的更多相关文章

  1. [Effective JavaScript 笔记]第22条:使用arguments创建可变参数的函数

    第21条讲述使用可变参数的函数average.该函数可处理任意数量的参数并返回这些参数的平均值. 如何创建可变参数的函数 1.实现固定元数的函数 书上的版本 function averageOfArr ...

  2. PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)

    PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr;  //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...

  3. C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

    在定义可变参数的函数之前,先来理解一下函数参数的传递原理: 1.函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈. 2.参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在 ...

  4. JavaScript Arguments 实现可变参数的函数,以及函数的递归调用

    //可变参数的函数 注:也可以使用对象作为参数来实现 function Max() { var temp = arguments[0] || 0; for (var i = 1; i < arg ...

  5. c 可变参数 定义可变参数的函数

    定义可变参数的函数,需要在stdarg.h头文件中定义的va_list类型和va_start.va_arg.va_end三个宏. 定义可变参数函数 va_list ap;  //实际是定义一个指针va ...

  6. C语言中可变参数的函数(三个点,“...”)

    C语言中可变参数的函数(三个点,“...”) 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end ...

  7. C/C++中带可变参数的函数

    1.带可变参数的函数由来 当函数中的参数个数不确定时,这时候就需要带可变参数的函数! 如我们经常使用的C库函数printf()实际就是一个可变参数的函数, 其原型为: int printf( cons ...

  8. C++学习之可变参数的函数与模板

    所谓可变参数指的是函数的参数个数可变,参数类型不定的函数.为了编写能处理不同数量实参的函数,C++11提供了两种主要的方法:如果所有的实参类型相同,可以传递一个名为initializer_list的标 ...

  9. C可变参数的函数

    我们实现一个简单的printf函数(可变参数) #include <stdio.h> #include <stdarg.h> void myprintf(const char ...

随机推荐

  1. How do you run an interactive process in Dart?

    https://stackoverflow.com/questions/12682269/how-do-you-run-an-interactive-process-in-dart The test ...

  2. js 时间常用处理方法

    众所周知,JavaScript核心包含Data()构造函数,用来创建表示时间和日期的对象. 今天主要跟大家梳理一下,常用的时间.日期处理方法,方便大家使用和理解 格式化时间 老生常谈,大概会这么写 1 ...

  3. robotframe添加自定义lib 报Importing test library ‘xxxx’ failed

    问题现象:在linux服务器上搭建jenkins 执行robot工程时报:Importing test library  ‘xxxx’   failed 问题分析一: 在library  引入非rob ...

  4. selenium 定位元素方法

    1.通过id定位元素 写法1: element = driver.find_element_by_id("kw") 写法2: from selenium.webdriver.com ...

  5. Mybatis环境搭建:自学随笔

    环境:IDEA  MySQL 1.建立maven工程,导入坐标:编辑pom.xml,建立mybatis约束. 在https://mybatis.org/mybatis-3/zh/getting-sta ...

  6. win7彻底卸载VS2015

    C盘越来越臃肿,VS2013.VS2015.VS2017以及VS2019都安装的情况下,C盘没有空间了. 系统:Win7 卸载办法: 管理员方式进cmd,执行vs_professional.exe / ...

  7. 利用ViewStub实现布局懒惰加载

    这个问题也是头条面试官问的,本身没什么难度,但以前确实没仔细研究过. 1.使用介绍 ViewStub是一种不可见的尺寸为0的View,用来实现布局资源的懒加载.当ViewStub被设置为用户可见或其  ...

  8. 高精度NTC测温的硬件电路以及软件设计

    什么是NTC NTC是热敏电阻,其电阻值对温度变化敏感,在不同的温度下,可以呈现不同的电阻值. 热敏电阻有两类,一类是负温度系数电阻(NTC),温度增加时,电阻值降低,另一类是正温度系数电阻(PTC) ...

  9. 关于sql注入盲注,谈谈自己的心得

    1.没做防御的站点,拿上sqlmap直接怼就行了. 2.做了防御,有的用函数过滤了,有的用了waf(比如安全狗,云锁,华为云waf,360waf,知道创宇盾,护卫神等等) 这些就相当麻烦了,首先要探测 ...

  10. 2013.6.29 - OpenNER第九天

    上午看计算机网络,下午做计算机实验.晚上写计算机实验报告,还有OpenStack的实验报告. 写完之后跟师兄讨论了一下OpenNER的事情,觉得OpenNE很像是化学物质,里面很多都可以构成原子团,原 ...