可变类型参数

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

用到三个宏,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 根据类型将数据取出,并将指针向后移动。这是可变参数的底层。

相关推荐
45288655上山打老虎1 分钟前
【智能指针】
开发语言·c++·算法
水饺编程14 分钟前
第3章,[标签 Win32] :WM_CREATE 消息的产生
c语言·c++·windows·visual studio
草莓熊Lotso28 分钟前
《算法闯关指南:优选算法--前缀和》--31.连续数组,32.矩阵区域和
c++·线性代数·算法·矩阵
程序喵大人28 分钟前
CMake入门教程
开发语言·c++·cmake·cmake入门
csuzhucong29 分钟前
斜转魔方、斜转扭曲魔方
前端·c++·算法
我不会插花弄玉29 分钟前
类与对象-上【由浅入深-C++】
c++
郝学胜-神的一滴34 分钟前
Horse3D游戏引擎研发笔记(十):在QtOpenGL环境下,视图矩阵与投影矩阵(摄像机)带你正式进入三维世界
c++·3d·unity·游戏引擎·godot·图形渲染·unreal engine
-森屿安年-1 小时前
二叉平衡树的实现
开发语言·数据结构·c++
Q741_1472 小时前
C++ 高精度计算的讲解 模拟 力扣67.二进制求和 题解 每日一题
c++·算法·leetcode·高精度·模拟
水木姚姚2 小时前
C++ begin
开发语言·c++·算法