回调函数误解

时间:2013-07-19 13:30:31

标签: c callback function-pointers

这是问的问题: What is a “callback” in C and how are they implemented?

并且该问题的答案之一是这样的: (我稍微修改了打印值)

#include <stdio.h>
#include <stdlib.h>


void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++) {
        array[i] = getNextValue();
        printf("%d\n", array[i]);  // This is what I added
      }

}

int getNextRandomValue(void)
{
    return rand();
}

int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
}

现在我的问题是上面有什么回调函数的使用,当我可以在没有回调的情况下做到这一点?

#include <stdio.h>
#include <stdlib.h>


void populate_array(int *array, size_t arraySize, int getNextValue(void))
{
    for (size_t i=0; i<arraySize; i++) {
        array[i] = getNextValue();
        printf("%d\n", array[i]);
      }

}

int getNextRandomValue(void)
{
    return rand();
}

int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
}

另外,你能不能给我一个简单函数无法完成的回调函数的实例?

1 个答案:

答案 0 :(得分:3)

  

现在我的问题是上面有什么回调函数的使用,当我可以在没有回调的情况下做到这一点?

没什么,真的 - 这不是一个真实的例子,它只是为了解释回调是如何工作的。

  

另外,你能不能给我一个简单函数无法完成的回调函数的实例?

cURL library在需要用户提供数据时(例如,在发出HTTP POST请求时)或者想要通知用户数据检索时(使用读取,写入和各种其他回调函数)例如,当服务器发送HTTP头时)。虽然这可以使用临时缓冲区,动态内存分配和“属性设置器”功能来完成,但使用回调函数方法更方便(即它需要更少的工作量)。