0

可能重复:
函数指针的意义何在?

我看到了这段代码

 void (*foo)(int);

我明白这是指向函数的指针。

为什么我要指向另一个函数它给了我什么?

4

3 回答 3

1

您可以使用它来存储可以根据程序流程更改的处理函数,例如提供给qsort.

void (*my_handler)(int);

void set_handler(void(*fn)(int)) {
    my_handler = fn;
}

void do_stuff() {
    // ...
    my_handler(x); // using a custom handler
}

if (something) {
    set_handler(my_function_1);
}
else set_handler(my_function_2);    

do_stuff(); 
于 2012-10-27T07:30:31.877 回答
0

您可以为排序算法注入一个比较器。所以你可以排除一些外部的逻辑。

或者您可以使用此方法实现回调以进行某些事件处理。

于 2012-10-27T07:26:12.923 回答
0

函数指针通常用于回调。例如,假设一个异步函数做了一些繁重的工作,并且您希望在它完成时收到通知:

void doWork(void (*foo)(int));

当您调用该函数时,它会在自己的线程中运行,因此会立即返回。你怎么知道什么时候完成?你告诉它在完成后调用你提供的函数:

void myFoo(int n);

你把它传递给doWork()

doWork(myFoo);

现在doWork()完成后,它将调用myFoo().

这只是回调的一种用法,但我相信它是最常见的一种。

于 2012-10-27T07:27:30.830 回答