可变参数函数是否有可能将函数指针作为参数?

Is it possible that variadic function takes function pointer as argument?

标题说明了一切。函数可以作为变量函数中的参数传递吗?如果可以,我该如何访问它?

#include <stdio.h>
#include <stdarg.h>
#include <math.h>

void func(double x, int n, ...){
    va_list fs;
    va_start(fs, n);

    for (int i = 0; i < n; i++)
    {
        va_arg(fs, *); //this is where I get confused
    }
    
}

int main(){
    double x = 60.0 * M_PI / 180.0;
    func(x, 3, &cos, &sin, &exp);

}

va_args 的第二个参数是要转换成的类型。在这种情况下,每个函数都有兼容的类型,具体来说,它们采用单个 double 作为参数和 return 一个 double。指向此类函数的指针的类型是 double (*)(double),因此它就是您将用于该类型的类型。

double (*f)(double) = va_arg(fs, double (*)(double));
double result = f(x);

此外,不要忘记在循环后调用 va_end(fs);