可变参数列表是通过宏来实现的。这些宏定义于stdarg.h头文件中,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏---va_start,va_arg,va_end。可声明一个类型为va_list的变量,与这几个宏配合使用,访问参数。

  va_list:类型为char *。

  va_start:访问参数列表中未确定的部分,接收两个参数。第一个参数为va_list变量的名字,第二个参数为省略号前最后一个有名字的参数。

  va_arg:接收两个参数。第一个参数为va_list变量的名字,第二个参数为指向参数列表中下一个参数的类型。

  va_end:访问完最后一个可变参数时,调用它。

可变参数的限制:

(1)可变参数必须从头按顺序访问。不可直接访问中间某一元素。

(2)因可变参数部分并没有原型,所以在传参中,所有传给函数的值都将执行缺省参数类型提升。

  1. 用可变参数列表模拟实现printf函数。

    可变参数列表_第1张图片

  2. 用可变参数列表求平均值。

    可变参数列表_第2张图片

  3. 用可变参数列表求最大值。

    可变参数列表_第3张图片