可以将函数定义成能够接受任意数量的实参。通过将省略号(3个句点...)写在函数定义中形参列表的最后,即可表示调用该函数时可以提供数量可变的实参。例如

        int sumValues(  int first, ...  )

        {

            //  Code for the function

          }

  函数定义中至少有一个普通形参,也可以有多个。省略号必须放在形参列表的最后。

  显然定义中没有关于可变列表中实参的类型或数量的任何信息,因此我们的函数代码必须弄清自己被调用时接收的事什么。   C++库在 stdarg.h 头文件中定义了va_start、va_arg、va_end宏,可以帮助我们做这件事。

如下程序

#include<iostream>
#include<cstdarg>
using namespace std;
int sum( int count, ... )
{
  if( count <= 0 )
    return 0;
  va_list arg_ptr;                // Declare argument list pointer
  va_start( arg_ptr , count );          // Set arg_ptr to 1st argument

  int sum = 0;
  for( int i=0; i<count; i++ )
    sum += va_arg( arg_ptr, int );     // Add int value from arg_ptr and increment
  va_end( arg_ptr );               // Reset the pointer to null  
  return sum;
}
int main( )
{
  cout << sum( 6, 2, 4, 6, 8, 10, 12 ) <<endl;
  cout << sum( 9, 11, 22, 33, 44, 55, 66, 77, 88, 99 );
  system("pause");
  return 0;
}

运行结果42

    472

  main()函数在两条输出语句中调用了sum( )函数,第一次6个实参、第二次9个实参 ,每种情况下的第一个实参都指定跟着的实参个数。

  sum() 函数有一个int类型的普通参数,他表示后面跟着的实参的数量。形参表中的省略号表明可以传递任意数量的实参。有2种方法可以确定调用该函数时有多少实参:第一是像sum()函数一样,用一个固定的形参指定实参的数量;第二是要求最后一个实参具有特殊的标记值,以便进行检查和确认。

接下来再对程序语句进行分析。

      va_list arg_ptr;      声明一个va_list 类型的指针, va_list 类型在stdarg.h头文件中定义的,该指针用来依次指向各个实参。

      va_start( arg_ptr , count );  va_start 宏用来初始化arg_ptr,使其指向列表中第一个实参。

      for( int i=0; i<count; i++ )
        sum += va_arg( arg_ptr, int );   宏 va_arg返回 arg_ptr指向的位置存储的实参值,并使arg_ptr递增,指向下一个实参值。 宏va_ptr的第二个实参是第                          一个实参的类型,决定着我们得到的数值以及va_arg 递增的方式。

      va_end( arg_ptr );    宏va_end 将传递给他的实参——va_list 类型的指针复位成空值

转载于:https://www.cnblogs.com/ATMvip/archive/2012/11/05/2755752.html

C++ 接收数量不定的函数参数相关推荐

  1. 可以接收数量不定的参数的函数

    #include <iostream> #include <cstdarg>int sum(int count, ...) {//接收数量不定的参数if (count < ...

  2. c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for

    文章目录 数量不定的模板参数 auto ranged-base for 数量不定的模板参数 void print() {} //... 表示参数的数量不定 template<typename T ...

  3. python笔记之函数参数(缺省参数,命名参数,不定长参数)

    缺省参数 函数中定义带有初始值的形参 参数调用时,缺省参数可传,可不传 缺省参数一定在参数列表的最后面 缺省参数的数量没有限制 def x_y_sum(x,y=20): #缺省参数要在参数列表的最后p ...

  4. 给函数传递不定关键字的参数 和

    转载:http://blog.csdn.net/u012102306/article/details/52250050 收藏一下 在上一篇文章『[Python]给函数传递不定个数的参数』中,我们主要讲 ...

  5. python函数关键字参数传递_Python给函数传递不定关键字的参数

    转载请注明来自公众号『数据挖掘机养成记』 前言 在上一篇文章『[Python]给函数传递不定个数的参数』中,我们主要讲解了*在函数定义和函数调用阶段的不同作用,并留了一个小问题: 我们用*定义了add ...

  6. Python中自定义函数参数类型

    函数:函数是组织好的,可以重复使用的,用来实现单一的或相关联功能的代码段. 函数可以提升代码的复用率,提升代码的模块性,提升代码可维护性 使用def 关键字定义函数,例如:def func1(): 形 ...

  7. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  8. golang 可变参 不定参 函数 简介

    目录 什么是可变参数函数? 一个简单的可变参数函数 什么时候使用可变参数函数? 例子: 切片与可变参数函数 不传入参数 如何传递一个切片? Passed slice's spooky action a ...

  9. python函数参数定义不合法_下列哪种函式参数定义不合法?

    python 函数参数定义有四类: 1,必选参数:调用函数时候必须赋值的参数. a,须以正确的顺序传入函数 b,调用时的数量必须和声明时的一样 def exa(x): return x #b作为参数进 ...

最新文章

  1. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
  2. 七天学会NodeJS
  3. AutoCAD VBA:过三点创建一个圆
  4. 我眼中的软件测试,交互设计师眼中的软件测试
  5. SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门
  6. IAR建立CC2530工程的设置问题及生成.hex文件
  7. 科技公司预备持jiu战:谷歌将允许员工在2021年7月前居家办公
  8. CSS——规避脱标流和vertical-align
  9. oracle gg 有两个字段没同步到,GG配置Oracle同步到SQLServer
  10. Leetcode 392.判断子序列
  11. Visual Studio Code的设置及插件同步
  12. mybatis oracle 多条件批量删除_面试官经常喜欢问的Mybatis经典面试题,值得好好收藏哦!...
  13. ACL实验详细过程讲解
  14. php出库单编号怎么编,求大神帮忙写VBA,出库单自动保存到明细,自动编号
  15. 去除WINRAR的广告
  16. Mac版OneNote同步报错E000006B ctctv
  17. mysql发送邮件例子_发送邮件(示例代码)
  18. C1驾考成都胜利考场科目二经验
  19. 操作系统原理:哲学家就餐经典问题
  20. NFT自由人数字艺术藏品有收藏价值吗?

热门文章

  1. HTTPS|SSL笔记-SSL双向认证失败(服务端证书信任库不含客户端证书)握手过程(含wireshark分析)
  2. Android安全笔记-Tasks与Recents Screen与Fragment基本概念
  3. Java笔记-使用System.gc()进行内存回收
  4. HTTPS-客户端与服务器三次握手过程(含wireshark分析)
  5. Spring Boot文档阅读笔记-@SpringBootApplication官方解析与实例(1.5.19)
  6. C++|STL学习笔记-map的基本操作(插入,删除,遍历,大到小输出)【仿大佬写法】
  7. Linux工作笔记-Linux常用命令(一)
  8. C++ STL list排序
  9. echart 地图 某个地区_一站式解决echarts实现区域地图
  10. tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入...