externalFunction - это функция оптимизации, называемая бинарным поиском. Оптимизирует целевую функцию одного параметра. У меня есть целевая функция двух параметров. Я хочу перебрать второй параметр и для каждого значения выполнить бинарный поиск, чтобы определить оптимальный первый параметр. То есть я хочу провести исчерпывающий поиск по второму параметру. Мысли?
Объяснение этого с самого начала позволило бы избежать путаницы.
Вы не можете (даже с глобальной переменной). Если вы не можете изменить код outerFunction
или fTwoParameters
, вам придется самостоятельно создать новую функцию.
СТАРЫЙ ОТВЕТ
Вы не может. C не позволяет передавать другой тип, определенный в сигнатуре функции. Чего бы вы ни хотели достичь, вам нужно будет сделать это по-другому.
Например, вы можете создать обобщенную функцию c с дополнительным аргументом для указания количества аргументов (передайте функцию приведите к void (*)(void)
в этом случае):
void outerFunction(unsigned nargs, void (*funcptr)(void)) {
if (nargs == 1) {
void (*realfunc)(float) = (void (*)(float))funcptr;
realfunc(1.0);
} else if (nargs == 2) {
void (*realfunc)(float, float) = (void (*)(float, float))funcptr;
realfunc(1.0, 2.0);
} /* ... */
}
Хотя вам не нужно передавать функцию. Вы можете просто вызвать его из другой функции (или main
) с любым вторым параметром, который вам нужен.
Обращаясь к вашему редактированию, вы можете просто сделать следующее:
void outerFunction(void (*funcptr)(float, float), float b) {
funcptr(1, b);
}
for (int i = 1; i < 1000; i++){
outerFunction(fTwoParameters, i);
}
Или даже:
for (int i = 1; i < 1000; i++){
fTwoParameters(1, i);
}
Нет необходимости передавать указатель на любую функцию. Вы должны создать лучший пример, объясняющий, что вы действительно пытаетесь сделать, и почему это имеет какой-то смысл, потому что из вашего текущего вопроса это действительно не так. Это похоже на проблему XY .