C++ 接收数量不定的函数参数
可以将函数定义成能够接受任意数量的实参。通过将省略号(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++ 接收数量不定的函数参数相关推荐
- 可以接收数量不定的参数的函数
#include <iostream> #include <cstdarg>int sum(int count, ...) {//接收数量不定的参数if (count < ...
- c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for
文章目录 数量不定的模板参数 auto ranged-base for 数量不定的模板参数 void print() {} //... 表示参数的数量不定 template<typename T ...
- python笔记之函数参数(缺省参数,命名参数,不定长参数)
缺省参数 函数中定义带有初始值的形参 参数调用时,缺省参数可传,可不传 缺省参数一定在参数列表的最后面 缺省参数的数量没有限制 def x_y_sum(x,y=20): #缺省参数要在参数列表的最后p ...
- 给函数传递不定关键字的参数 和
转载:http://blog.csdn.net/u012102306/article/details/52250050 收藏一下 在上一篇文章『[Python]给函数传递不定个数的参数』中,我们主要讲 ...
- python函数关键字参数传递_Python给函数传递不定关键字的参数
转载请注明来自公众号『数据挖掘机养成记』 前言 在上一篇文章『[Python]给函数传递不定个数的参数』中,我们主要讲解了*在函数定义和函数调用阶段的不同作用,并留了一个小问题: 我们用*定义了add ...
- Python中自定义函数参数类型
函数:函数是组织好的,可以重复使用的,用来实现单一的或相关联功能的代码段. 函数可以提升代码的复用率,提升代码的模块性,提升代码可维护性 使用def 关键字定义函数,例如:def func1(): 形 ...
- 深入理解javascript函数系列第二篇——函数参数
前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...
- golang 可变参 不定参 函数 简介
目录 什么是可变参数函数? 一个简单的可变参数函数 什么时候使用可变参数函数? 例子: 切片与可变参数函数 不传入参数 如何传递一个切片? Passed slice's spooky action a ...
- python函数参数定义不合法_下列哪种函式参数定义不合法?
python 函数参数定义有四类: 1,必选参数:调用函数时候必须赋值的参数. a,须以正确的顺序传入函数 b,调用时的数量必须和声明时的一样 def exa(x): return x #b作为参数进 ...
最新文章
- python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
- 七天学会NodeJS
- AutoCAD VBA:过三点创建一个圆
- 我眼中的软件测试,交互设计师眼中的软件测试
- SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门
- IAR建立CC2530工程的设置问题及生成.hex文件
- 科技公司预备持jiu战:谷歌将允许员工在2021年7月前居家办公
- CSS——规避脱标流和vertical-align
- oracle gg 有两个字段没同步到,GG配置Oracle同步到SQLServer
- Leetcode 392.判断子序列
- Visual Studio Code的设置及插件同步
- mybatis oracle 多条件批量删除_面试官经常喜欢问的Mybatis经典面试题,值得好好收藏哦!...
- ACL实验详细过程讲解
- php出库单编号怎么编,求大神帮忙写VBA,出库单自动保存到明细,自动编号
- 去除WINRAR的广告
- Mac版OneNote同步报错E000006B ctctv
- mysql发送邮件例子_发送邮件(示例代码)
- C1驾考成都胜利考场科目二经验
- 操作系统原理:哲学家就餐经典问题
- NFT自由人数字艺术藏品有收藏价值吗?
热门文章
- HTTPS|SSL笔记-SSL双向认证失败(服务端证书信任库不含客户端证书)握手过程(含wireshark分析)
- Android安全笔记-Tasks与Recents Screen与Fragment基本概念
- Java笔记-使用System.gc()进行内存回收
- HTTPS-客户端与服务器三次握手过程(含wireshark分析)
- Spring Boot文档阅读笔记-@SpringBootApplication官方解析与实例(1.5.19)
- C++|STL学习笔记-map的基本操作(插入,删除,遍历,大到小输出)【仿大佬写法】
- Linux工作笔记-Linux常用命令(一)
- C++ STL list排序
- echart 地图 某个地区_一站式解决echarts实现区域地图
- tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入...