0

下面是一个问题: 什么是 C 中的“回调”,它们是如何实现的?

该问题的答案之一是这样的:(我也稍作修改以打印该值)

#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);
}

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

4

1 回答 1

3

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

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

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

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

于 2013-07-19T13:35:51.753 回答