1.变参函数 : 声明中带有“...”的函数
(1)函数调用时参数个数不确定
(2)注意:
变参函数中至少有一个固定参数
变参函数在声明,定义时参数不固定
变参列表在调用参数中, 参数个数,类型都是固定的
2.va_list 类型名 : typedef char* va_list
va_start va_arg va_end 是宏
va_start : 保存第一个变参列表 例: va_start(ap, last) : &last + sizeof(last)
va_arg : 取出当前变参并将指针指向下一变参 例 : va_arg(ap, type) : *((type *)((ap += sizeof(type)) - sizeof(type)))
va_end : 将指针清空
扩展 : Tnd(type , tnd) : (sizeof(type) + tnd) & ~tnd 结果为4的整数倍 通常tnd 是 3U
3.使用va_arg(ap, type)
注意事项: 整形提升 : 若获取的类型为char会提升为int
4.整形提升的目的 : 为了对齐
英语 : decimal(小数)