什么是函数指针,我将如何使用它们?

zla*_*ack 14 c pointers function-pointers

我明白我可以使用指针来实现功能.

有人可以解释为什么会使用它们,以及如何使用它们?简短的示例代码对我很有帮助.

Joy*_*tta 22

一个简单的例子是这样的:根据您的业务逻辑,您有一系列操作(函数).您有一个散列函数可以将输入问题减少到其中一个业务逻辑函数.一个干净的代码将有一个函数指针数组,你的程序将从输入推断出该数组的索引并调用它.

这是一个示例代码:

typedef void (*fn)(void) FNTYPE;
FNTYPE fn_arr[5];

fn_arr[0] = fun1; // fun1 is previously defined
fn_arr[1] = fun2;
...

void callMyFun(string inp) {
    int idx = decideWhichFun(inp); // returns an int between 0 and 4
    fn_arr[idx]();
}
Run Code Online (Sandbox Code Playgroud)

但当然,回调是最常见的用法.示例代码如下:

void doLengthyOperation(string inp, void (*callback)(string status)) {
  // do the lengthy task
  callback("finished");
}

void fnAfterLengthyTask(string status) {
    cout << status << endl;
}

int main() {
    doLengthyOperation(someinput, fnAfterLengthyTask);
}
Run Code Online (Sandbox Code Playgroud)


for*_*idt 13

一个非常常见的用例是回调函数.例如,如果从DB加载某些内容,则可以实现加载功能,以便将进度报告给回调函数.这可以通过函数指针完成.


tlo*_*ach 5

回调.我对一大块代码进行异步调用,并希望它在完成时让我知道,我可以向它发送一个函数指针,一旦完成就调用它.