Va_list访问第二个参数

Va_list to access second argument

本文关键字:第二个 参数 访问 list Va      更新时间:2023-10-16

我试着写一个这样的函数:

int solve(double* x, double xA, double xB, double zeps,
          double funct(double x, double*), ...)

这里,'funct'是另一个作为参数传递的函数。现在我想用va_list来访问这个函数的第二个参数funct',它是一个double*。所以我这样做:

va_list point_arg ;
va_start ( point_arg , funct ) ;
double  pp = va_arg ( point_arg , double  );
double * pp = va_arg ( point_arg , double * );

似乎,据我所知,我使用的第一个va_arg成功地找到了函数'funct'的第一个参数,这是一个双精度。然而,va_arg的第二次使用无法获得指向双精度类型的正确指针(第二个参数)。你知道这是否可能,如果不可能,怎么做吗?

您误解了函数指针的工作方式。函数指针是指向函数存储时在内存中的位置的指针,它不包含有关该函数的参数的任何信息。在调用函数指针时,必须自己提供函数的形参。

所以你不能访问funct指针的参数,因为这些参数还不存在。它们只有在调用指向do函数时才会存在,这可能发生在代码中。

funct不使用省略号,不能对其应用va_list函数