2012-10-27 54 views

回答

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(); 
0

你可以注入一個排序算法的比較器。所以你可以排除一些外部的邏輯。

或者你可以用這個方法實現一個回調來處理一些事件。

0

函數指針通常用於回調函數。例如,假設一個異步函數,做一些繁重的工作,並且希望其完成時得到通知:

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

當你調用該函數,它在自己的線程運行,因此它立即返回。你怎麼知道什麼時候結束?你告訴它打電話的時候,它的完成你提供一個函數:

void myFoo(int n); 

,你傳遞給doWork()

doWork(myFoo); 

現在,當doWork()完成後,它會調用myFoo()

這只是回調的一種用法,但我認爲這是最常見的回調。