可变类型参数

将形参设为可变类型参数,首先自己的函数要先有一个确定的形参,然后剩余的参数为 ...

用到三个宏,va_list, va_start, va_arg .

va_list: 当作一个类型,底层是一个char* 被 typedef

va_strat: 先定义一个va_list 类型的变量,假设是 s ,然后 va_strat( s,n),意思是将s这个指针指向第一个形参的地址处。

va_arg: 用法是将定义的va_list变量和相应你要取出的形参类型传递给它。比如va_arg(s,int)。然后在内部他调整s指向下一个形参。

函数执行创建栈帧,先将传递的参数压栈,C函数中的参数是从右向左依次入栈,地址从低到高,va_list 就是一个指针类型,va_strat将该指针定位到形参的第一个参数栈帧中的地址处,va_arg 根据类型将数据取出,并将指针向后移动。这是可变参数的底层。

相关推荐
时光の尘2 分钟前
C语言菜鸟入门·关键字·void的用法
c语言·开发语言·c++·算法·c#·c·关键字
小林熬夜学编程7 分钟前
【Linux系统编程】第四十九弹---日志系统构建指南:从基础结构到时间处理与Log类实现
linux·运维·服务器·c语言·开发语言·c++
DeepAlchemy12 分钟前
ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
c++·单片机·ros·rosserial
螺旋天光极锐斩空闪壹式!28 分钟前
第十三课 二维数组(2)方向数组
开发语言·c++·算法
此生只爱蛋28 分钟前
【C++】类和对象-深度剖析默认成员函数-下
c++
是店小二呀34 分钟前
【C++】右值引用与移动语义详解:如何利用万能引用实现完美转发
c++·redis
十五年专注C++开发38 分钟前
C++不完整类型(Incomplete Type)的检测与避免
开发语言·c++·算法·设计模式
风掣长空42 分钟前
C++11————线程库
开发语言·c++
陌小呆^O^43 分钟前
关于C/C++Windows下连接MYSQL操作
c语言·c++·windows
凌云行者44 分钟前
OpenGL入门009——漫反射在片段着色器中的应用
c++·cmake·openg