2014-09-20 43 views
5

所以可以說我有一個功能:回調函數:void之間的差異(* FUNC)(int)和無效(FUNC)(INT)

void foo (int i){ 
    cout << "argument is: " << i << endl; 
} 

而且我通過這個功能:

void function1 (void(callback)(int), int arg){ 
    callback(arg); 
} 

void function2 (void(*callback)(int), int arg){ 
    callback(arg); 
} 

這兩個功能是否相同?兩者有什麼區別?

+2

完全相同。參數中的函數類型被調整爲指針。 – 2014-09-20 21:42:11

+0

與聲明一個接受'int * x'和'int x []''的函數相同的處理;你不能按值傳遞函數或數組;沒有顯式'*'的版本只是指針版本的語法糖。 – ShadowRanger 2015-12-23 14:28:17

回答

1

它們是相同的。具有函數類型的參數被轉換爲指向函數類型的指針。

3

規則是,在一個函數的參數列表中,一個被聲明爲具有函數類型的參數被調整爲具有指向函數類型的指針(類似地,並且可能更爲熟知的是,聲明爲類型爲「數組」的參數T 「被調整爲具有類型‘指針T’,在說明符冗餘括號是允許的,但是忽略

因此,在

void function1 (void(callback)(int), int arg); 
void function2 (void (*callback)(int), int arg); 
void function3 (void callback(int), int arg); 

的這三項功能的第一個參數具有完全相同的類型 - 」。指向函數(int)的指針返回void「。

相關問題