2013-07-19 35 views
0

下面是提出這樣的問題: What is a 「callback」 in C and how are they implemented?回調函數誤解

,並在這一問題的答案之一是這樣的: (我稍微修改打印值也)

#include <stdio.h> 
#include <stdlib.h> 


void populate_array(int *array, size_t arraySize, int (*getNextValue)(void)) 
{ 
    for (size_t i=0; i<arraySize; i++) { 
     array[i] = getNextValue(); 
     printf("%d\n", array[i]); // This is what I added 
     } 

} 

int getNextRandomValue(void) 
{ 
    return rand(); 
} 

int main(void) 
{ 
    int myarray[10]; 
    populate_array(myarray, 10, getNextRandomValue); 
} 

現在我的問題是上面什麼是回調函數的用法,什麼時候我可以不用回調呢?

#include <stdio.h> 
#include <stdlib.h> 


void populate_array(int *array, size_t arraySize, int getNextValue(void)) 
{ 
    for (size_t i=0; i<arraySize; i++) { 
     array[i] = getNextValue(); 
     printf("%d\n", array[i]); 
     } 

} 

int getNextRandomValue(void) 
{ 
    return rand(); 
} 

int main(void) 
{ 
    int myarray[10]; 
    populate_array(myarray, 10, getNextRandomValue); 
} 

另外,你能給我一個迴歸函數的實例嗎?不能用簡單的函數來完成嗎?

回答

2

現在我的問題是什麼是在上面使用回調函數,當我可以做到沒有回調嗎?

沒有,真的 - 這不是一個現實生活中的例子,它只是爲了解釋一個回調是如何工作的。

另外,你能給我一個真正的回調函數的例子,它不能用簡單的函數來完成嗎?

cURL library採用讀,寫和各種其它回調函數時,它需要用戶提供的數據(例如,使一個HTTP POST請求時)或當它要通知的數據檢索的用戶(例如,當服務器發送HTTP頭時)。雖然這可以通過使用臨時緩衝區,動態內存分配和「屬性設置器」功能來完成,但使用回調函數方法更方便(即,它需要更少的工作量)。

+0

回調基本上添加定製 –

+0

和模塊化。 – nouney