2015-07-21 141 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函数。