可变类型参数

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

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

相关推荐
Mr_WangAndy6 小时前
C++数据结构与算法_线性表_数组_概念动态数组,刷题
c++·二分查找·数组刷题·数组字符串逆序·零移动·有序数组的平方
阿猿收手吧!6 小时前
【C++】jthread:优雅终止线程新方案
开发语言·c++
十五年专注C++开发7 小时前
C++中各平台表示Debug的宏
开发语言·c++·debug
阿猿收手吧!8 小时前
【C++】Ranges:彻底改变STL编程方式
开发语言·c++
Polaris北9 小时前
第二十三天打卡
c++
船神丿男人11 小时前
C++:STL string(一)
开发语言·c++
程序员zgh11 小时前
Linux 内存管理单元 MMU
linux·运维·服务器·c语言·开发语言·c++
Smart-Space11 小时前
将copilot键映射为右control - 参考powertoys实现
c++
Trouvaille ~11 小时前
【Linux】TCP协议基础与连接管理详解:从三次握手到四次挥手
linux·运维·服务器·网络·c++·网络协议·tcp/ip
想做功的洛伦兹力112 小时前
2026/2/12日打卡
开发语言·c++·算法