2011-12-26 3 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

그들이 한 말. 또한 태그에 "해시"가 있지만 함수의 기능은 중요하지 않습니다. 이 메커니즘은 해시가 아닌 함수와 동일합니다. –

답변

3

첫 번째 줄에는 맞춰보세요. 그 중 하나는 hash_size 유형이고 다른 하나는 인수가 const char* 인 함수를 가리키는 포인터이고 두 번째 인수는 hash_size을 반환하는 함수의 헤더입니다.

두 번째 줄에서 dict은 구조체에 대한 포인터 인 것으로 나타나므로 포인터는 구조체에 저장된 포인터 hashfunc을 호출합니다. 마지막 부분 (... % dict->size)은 모듈러스 연산에 불과합니다. 당신이> hasfunc (CONST 문자를 dict- 호출 할 수 있습니다 그리고

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

:

3
hash_size (*hashfunc) (const char *) 

기능 포인터입니다.

hashfuncconst char *을 인수로 받고 hash_size 유형을 반환하는 함수에 대한 포인터입니다.

1

함수 포인터 만 매개 변수로 전달합니다. 다음은 전달되어야하는 함수 유형의 정의입니다.

hash_size (*hashfunc) (const char *) 

예. const char *을 받고 hash_size을 반환하는 함수입니다.

1

같은 DICT를 할당하고 해당 분야의 hashfunc을 채울 것입니다 그래서 함수 포인터

hash_size (*hashfunc) (const char *) 

그 dcreate()이다 *), hash_size를 반환합니다.

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

그것은 참으로 :

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