C++中可变长参数的使用方法

马谦马谦马谦
马谦马谦马谦
马谦马谦马谦
606
文章
12
评论
2018年5月7日19:02:28 评论

一、可变长参数介绍

某些情况下为了完成一些功能,需要用到可变长参数的函数,例如我们最常用的printf和scanf函数:

它们首先都是一个字符串打头,后面再跟上不定数量的参数,为我们的输出形式提供了多样性。

对于像这样的不定长参数的函数来说,它的声明形式为:

...表示不定长度的参数,和函数形参的默认值一样,...也只能放在函数的最后,否则函数无法判断出哪些才是不定参数。

二、变参使用

变参函数内部是通过栈来实现的,对于每一个参数来说,在调用时它们都会从右到左依次被压入栈中,而栈的性质是先进后出,所以在使用时会从左到右提取。

C语言中定义了一种类型va_list来提取这些参数,va_list类型的定义如下:

提取需要用到的API函数为va_startva_arg,其用法如下:

三、使用示例

运行结果:

马谦马谦马谦
  • 本文由 发表于 2018年5月7日19:02:28
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/c-cpp/the-usage-of-cpp-border-length-args.html
给socket分配随机端口 C/C++

给socket分配随机端口

客户端的socket不需要手动执行bind绑定地址,但这不意味着客户端socket真的不需要绑定端口,实际上是内核它帮我们做了这个操作,在执行connect时,内核发现没有绑定端口,就会自动选择一个合...
vector中emplace_back方法的用途 C/C++

vector中emplace_back方法的用途

在写代码的过程中,CLion提醒我把push_back方法替换成emplace_back方法: 代码中我的想法是使用vector创建一个二维数组,并提前分配好空间,避免后序频繁扩容增加时间复杂度。 e...
宏定义踩坑实战:嵌套调用宏定义 C/C++

宏定义踩坑实战:嵌套调用宏定义

问题背景:在刷题的过程中,要使用min函数,但是线上OJ并没有这个函数。因为一时也想不起它到底属于哪个头文件,所以为了偷懒,顺手就写下了以下宏定义: #define min(x, y) (x) <...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: