C++中,如果我们想要获取不确定个数的参数进入函数,就可以使用va_list类型的变量

C++中如果我们想要获取不确定个数的参数进入函数,可以使用下面这种方法:

 1  1 #include <cstdarg>                              //这里我们添加进来所需要的类库<csrdarg>
 2  2
 3  3 // first argument is int count of remaining args
 4  4 // ... remaining args are doubles for average
 5  5
 6  6 double average(const int count, ...)
 7  7 {
 8  8         va_list ap;                              //在这里我们定义一个va_list类型的变量
 9  9         int i;                                 //在这里我们定义一个可以在下方循环使用的整型变量
10 10         double total = 0.0;                          //在这里我们定义一个浮点数保存所有的参数的和
11 11         va_start(ap, count);                         //在这里我们获得可变参数列表的第一个参数的地址,括号里面第一个参数是类型为va_list的指针,第二个参数是可变类型最左边的参数,此处是count
12 12
13 13         for(i = 0; i < count; ++i) {
14 14                 total += va_arg(ap, double);                //在这里我们返回可变的参数,括号里面第二个参数是你想要返回的参数类型
15 15         }
16 16
17 17         va_end(ap);                                //在这里我们可以清空可变参数列表va_list
18 18         return total / count;
19 19
20 20 }            

然后我们就可以在主函数中调用这些函数了,效果很不错

void main(int argc, char ** argv){
        printf("The value of avarage is %lg\n", average(3, 7.3, 9.5,8.5));    //结果为8.334
        printf("The value of avarage is %lg\n", average(2, 4.6, 5.4));        //结果为5
}

要记住,函数定义要放在主函数的前面,不然会出现C3861错误,今天就犯了这个错误。

有了这个函数,我们就可以传入不同个数的参数进行运算了,非常方便。

时间: 2024-08-10 13:30:54

C++中,如果我们想要获取不确定个数的参数进入函数,就可以使用va_list类型的变量的相关文章

Webkit IDL中自定义[命名]属性的获取(Getter)以及设置(Setter)函数

一.自定义命名属性的获取(Getter)以及设置(Setter)函数: [CustomNamedGetter](i), [CustomNamedSetter](i) 命名属性的W3C链接如下:?The spec of named properties (注意,下面描述的webkit行为和W3C的规范是不同的) 总结: [CustomNamedGetter] 或者 [CustomNamedSetter] 允许你为命名属性的getter或者setter编写自己的绑定函数. 用法如下: [ Custo

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

C语言中可变参数的函数(三个点,"...") 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解. 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表 void foo(...); void foo(parm_list,...); 这种方式和我们以前认识的不大

JS中setInterval、setTimeout不能传递带参数的函数的解决方案

在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,接下来为大家介绍具体的解决方法 在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数, 这就需要想方法解决. 一.采用字符串形式:——(缺陷)参数不能被周期性改变 setInterval("foo(id)",1000); 二.匿名函数包装 (推荐) window.setInterval(

Android中sqlite之从网上获取数据更新UI

Android中sqlite之从网上获取数据更新UI 在这里,本人主要想做一个 1.首先从网上获取数据 2.将获取的数据存储到本地 3.地图上显示屏幕范围内的marker. 4.当地图状态改变时,要查询本地数据库,并更新地图. BaiduMap有个setOnMapStatusChangeListener监听类,该类监听BaiduMap的状态,共有三个方法--onMapStatusChangeStart(),onMapStatusChangeFinish(),onMapStatusChange()

在C语言中以编程的方式获取函数名

调试常用的 __FILE__, __FUNCTION__, __LINE__ 调试常用的 __FILE__, __FUNCTION__, __LINE__ 没想到 VC6 不支持 __FUNCTION__ 所以我写了如下的奇怪代码 //用来记录当前行和当前函数//也可说是记录 堆栈void log_stack(const char *file, int line, const char * function); //当然还要对 __FUNCTION__ 宏作点修饰,因为这个宏只是在函数里面才起作

Android中如何解析网页,获取网页中的元素内容

问题: 由于android的WebView等相关类没有提供解析html网页内容的接口,我们想要获取网页的内容并解析出我们想要的元素内容,用android的固有API是没办法了. 这里我提供两种解析html思路:第一种,使用第三方解析html库:第二种,使用JAVA与JS回调,通过JS解析html. 之前研究了一下htmlparser这个开源库,但是发现和android提供的库有冲突,但其在纯java应用程序下是可行的. htmlparser下载地址:http://htmlparser.sourc

在完全由Spring管理的环境中使用Spring的Context获取Bean实例

在大型的应用中,常常会有很灵活的需求,而在使用了框架之后,虽然可以大大提高开发的效率,但同时,也把我们框到一个架子中了. 下面先说一下我遇到的问题,事情大概是这样的: @Component @Scope("prototype") public class Action1 implements Action{ ..... } @Component @Scope("prototype") public class Action2 implements Action{ .

React 中的 AJAX 请求:获取数据的方法

React 中的 AJAX 请求:获取数据的方法 React 只是使用 props 和 state 两处的数据进行组件渲染. 因此,想要使用来自服务端的数据,必须将数据放入组件的 props 或 state 中. 首先引入 axios. 1.`import axios from 'axios';` constructor 方法非常标准,调用 super,然后初始化 state,设置一个空的 posts 数 传入新的 posts 数组,使用 this.setState 方法更新组件状态.这会导致重

博客中gitalk最新评论的获取 github api使用

博客中,对于网友的评论以及每篇文章的评论数还是很重要的.但是基于静态的页面想要存储动态的评论数据是比较难的,一般博客主题中都内置了评论插件,但是博客主题中对于最新评论的支持显示还是很少的,至少目前我是没怎么发现.博客 Powered by Hexo & Icarus,采用Gitalk评论,再次感谢此三位作者的辛勤码代码,才有了以下的内容.基于此背景基础上,聊聊最新评论的实现. 博客的使用, Hexo & Icarus,采用Gitalk评论 的使用自行百度了. 使用场景 最新评论列表 最热文