C/C++ 几种不定参数传参方法

在ioctrl、setopt、sendEvent等类似API中,通常第一个参数是类型(操作、事件类型),第二个参数是该类型对应的参数,不同的类型对应的参数类型及个数都是不同的,这就需要用到不定参数。下面介绍几种不定参数的传参方法。

  • 结构体指针
    将每个操作对应的参数封装为一个结构体,第二个参数类型定义为void *,传递结构体指针的方式传递不同的参数。
  • va_list
    VA_LIST 是在C语言中解决变参问题的一组宏,所在头文件:#include ,用于获取不确定个数的参数。
    原理:函数参数是存储在栈中的,函数参数从右往左依次入栈,使用时依次出栈,按照每个事件对应参数的类型及顺序将出栈的参数转换出来。
  • Android Parcel
    Parcel是android实现的一个类,用于封装不同的数据类型,原理类似va_list,使用时需按照参数原排列顺序依次读取。

你可能感兴趣的:(编程总结)