可变参数函数是否有可能将函数指针作为参数?
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);
。
标题说明了一切。函数可以作为变量函数中的参数传递吗?如果可以,我该如何访问它?
#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);
。