【问题标题】:Pointer to function why sould I use it? [duplicate]指向函数的指针我为什么要使用它? [复制]
【发布时间】:2012-10-27 07:21:06
【问题描述】:

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

我看到了这段代码

 void (*foo)(int);

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

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

【问题讨论】:

    标签: c function pointers


    【解决方案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(); 
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        void myFoo(int n);
        

        然后你将它传递给doWork():

        doWork(myFoo);
        

        现在当doWork() 结束时,它会调用myFoo()

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

        【讨论】:

          猜你喜欢
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-26
          • 1970-01-01
          • 2012-10-07
          相关资源
          最近更新 更多