我看到了这段代码
void (*foo)(int);
我明白这是指向功能的指针。
为什么我要指向另一个功能它给了我什么?
答案 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()
。
这只是回调的一种用途,但我认为这是最常见的回调。