Va_list для доступа ко второму аргументу - PullRequest
0 голосов
/ 05 мая 2011

Я пытаюсь написать такую ​​функцию:

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, который я использую, успешно находит первый аргумент функции 'функция', который является двойным. Тем не менее, второе использование va_arg не может получить правильный указатель на double (второй аргумент). Знаете ли вы, возможно ли это, а если нет, то как это сделать?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Вы неправильно поняли, как работают указатели функций. Указатель на функцию - это указатель на место в памяти, когда функция сохраняется, и он не содержит никакой информации о параметрах этой функции. Вы должны сами указать параметры функции, когда вызываете указатель на функцию.

Таким образом, вы не можете получить доступ к параметрам указателя funct, поскольку эти параметры еще не существуют. Они будут существовать только после вызова указанной функции, что предположительно произойдет внутри вашего кода.

0 голосов
/ 05 мая 2011

функция не использует многоточие, к ней нельзя применить функцию va_list.

...