Я видел почти весь популярный вопрос обратного вызова здесь, но до сих пор не получается использовать указатель функции в обратном вызове вместо простого использования обратного вызова через обычную функцию. Вот принятый ответ (модифицированный) популярного вопросаПо-прежнему не получается обратный вызов и нормальный вызов функции
void populate_array(int *array, size_t arraySize,
int getNextValue(void)) // Note that, here I use normal function call.
{
for (size_t i=0; i<arraySize; i++)
array[i] = getNextValue();
}
int getNextRandomValue(void)
{
return rand();
}
int main(void)
{
int myarray[10];
populate_array(myarray, 10, getNextRandomValue);
...
}
Как вы уже видели выше, что еще я могу добиться реализации обратного вызова с помощью простой функции, так почему указатель использовать функции для выполнения обратного вызова. (то есть зачем передавать ссылку), когда я могу обойтись без этого.
Кроме того, мы можем реализовать qsort, bsearch
без указателя функций для обеспечения обратного вызова в них. Итак, почему с помощью указатель на функцию.
Они работают одинаково - они являются указателями на функции. Подобно тому, как (в контексте вашего 'main')' myarray' и '& myarray' оба указывают на одно и то же. –
@DrewMcGowen Почти там. 'myarray' и' & myarray' не указывают на одно и то же. –
Итак, почему люди предпочитают 'int (* foo) (void)' вместо 'int foo()' –