C 函数 可变参数

C函数 · 2022-11-07

出自https://wangdoc.com/clang/function
最近再看C语言,由于非科班出身,只有一丢丢VB印象(早已忘光),没学C语言总觉得有一点点遗憾。填坑。
k可变参数 ,一个函数有不确定个函数时可用。

func(int i, ...){}

参数 ... 便是可变参数位置。
定义含有可变参数函数时,需要先引入 #include <stdarg.h>
其中有几个函数,va_list, va_start, va_arg, va_end

  1. va_list: 一个数据类型,用来定义一个可变参数对象。它必须在操作可变参数时,首先使用。
  2. va_start: 来确定可变函数位置,他接受两个参数。一个是用来初始化的可变参数对象。第二个参数是原始函数里面可变参数的那个参数,用来为可变参数定位。
  3. va_arg: 一个函数,用来取出当前那个可变参数,每次调用后,内部指针会指向下一个参数。第一个可变参数对象,第二个是当前可变参数类型。
  4. va_end: 一个函数,用来清理可变参数对象。
/* Online C Compiler and Editor */
#include <stdio.h>
#include <stdarg.h>
double average(int i, ...) {
  double total = 0;
  va_list ap;
  va_start(ap, i);
  for (int j = 0; j <= i; ++j) {
    double value = va_arg(ap, int);
    printf("%f\n",value);
    total += value;
  }
  va_end(ap);
  return total / i;
}

int main()
{
    printf("%f",average(3,4,3,4));
    return 0;
}
// 结果
4.000000
3.000000
4.000000
0.000000
3.666667

编辑器地址

Theme Jasmine by Kent Liao