2011-12-26 199 views
1

我發現了一些代碼,我需要用於我的應用程序,但它有兩條線我不知道他們究竟做了什麼,以及如何...請將它們解釋給我或指引我到一個鏈接,所以我可以閱讀更多關於它。c函數指針解釋

Dict* dcreate(hash_size size, hash_size (*hashfunc) (const char *)); 

在這裏,我想它是傳遞一個函數作爲參數與它的參數在下面的括號!?

hash_size i = dict->hashfunc(key) % dict->size; 

在這裏,我的猜測和我的狗一樣好!

hashfunc

static hash_size def_hashfunc(const char* key){ 
    hash_size s = 0; 
    while(*key){ 
     s += (unsigned char) *key++; 
    } 
return s; 
} 

感謝。

+1

他們說什麼。另外,你的標籤中有「散列」,但功能的作用並不重要;這個機制對於非哈希函數是一樣的! – 2011-12-26 09:15:35

回答

3

對於第一行,您的猜測是正確的。這是接受兩個參數(其中一個是hash_size類型)的函數的標頭,另一個是指向參數爲const char*並返回hash_size的函數的指針。

在第二行中,dict似乎是一個指針到一個結構,所以dict->hashfunc(key)調用函數hashfunc,一個指針,其被存儲在dict結構。最後一部分(... % dict->size)只是模數運算。

3
hash_size (*hashfunc) (const char *) 

是一個函數指針

hashfunc是指向一個函數的指針,該函數接收const char *作爲參數並返回hash_size類型。

1

它只傳遞一個函數指針作爲參數。以下是應該通過的功能類型的定義:

hash_size (*hashfunc) (const char *) 

例如,一個接收const char *並返回hash_size的函數。

1

這是一個函數指針

hash_size (*hashfunc) (const char *) 

這樣dcreate()將分配一個快譯通,並填補該領域hashfunc像:

Dict * dict = (Dict *) malloc(sizeof(Dict)); 
dict->hashfunc = hashfunc; 

然後你可以叫dict-> hasfunc(爲const char *),它將返回hash_size。

hash_size i = dict->hashfunc(key) % dict->size; 

這的確是:

hash_size i = (dict->hashfunc(key)) % (dict->size) ;