功能指针为什么要使用它?

时间:2012-10-27 07:21:06

标签: c function pointers

  

可能重复:
  What is the point of function pointers?

我看到了这段代码

 void (*foo)(int);

我明白这是指向功能的指针。

为什么我要指向另一个功能它给了我什么?

3 个答案:

答案 0 :(得分: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(); 

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

void myFoo(int n);

然后将其传递给doWork()

doWork(myFoo);

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

这只是回调的一种用途,但我认为这是最常见的回调。