【发布时间】:2013-07-19 15:06:37
【问题描述】:
我在这里看到了几乎所有流行的回调问题,但仍然不明白为什么在回调中使用函数指针而不是简单地通过普通函数使用回调。这是一个热门问题的公认答案(已修改)
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() -
@ashish2expert 因为它 1. 更明确,2. 更接近真相。
-
"请注意,这里我使用的是普通函数调用。"不,这不是正常的函数调用!它是一个函数指针,只是使用了不同的语法。
标签: c pointers callback function-pointers