2015-07-21 139 views
0

我正在學習GLib GHashTable源代碼。 你可以在這裏看到鏈接的源代碼。GLib HashTable傳遞函數作爲參數

https://github.com/GNOME/glib/blob/master/glib/ghash.c

https://github.com/GNOME/glib/blob/master/glib/ghash.h

GHashTable *g_hash_table_new (GHashFunc hash_func, 
           GEqualFunc key_equal_func) 

g_hash_table_new功能在這裏創建基本的哈希表。 我的問題是參數。 前兩個參數「GHashFunc hash_func,GEqualFunc key_equal_func」正在傳遞給函數。

ghash.h,沒有hash_func和key_equal_func,它們只是符號。它們將被真正的哈希函數替代。 這兩個函數如何成爲參數?

我知道在ghash.h文件的一些哈希函數,如:

guint g_int_hash (gconstpointer v) 
guint g_str_hash (gconstpointer v) 

這些功能將被傳遞到「g_hash_table_new」期間的運行時間,以取代「hash_func」和「key_equal_func」。 但我不知道這是什麼技術? 如何將函數作爲參數傳遞給另一個函數,並在運行時間內將其替換。

謝謝

+0

他們是功能指針... http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work,http://stackoverflow.com/questions/4295432/typedef-函數指針 – polarysekt

回答

0

你傳遞參數是一個點,你定義哈希計算函數。所有的功能過程都是回調函數。哈希表只是傳遞參數給你的equel函數。