定义返回函数指针的函数的各种样式是什么?

我有一个function:

int compare(char * c1, char * c2){ ... ... } 

我可以编写一个函数int ret_compare(void * item)返回指向比较的函数的各种样式是什么?

有两种主要样式,一种使用typedef而另一种不使用(使用typedef两种变体)。 您的比较器应该采用常量指针,如下所示:

 int compare(const char *c1, const char *c2) { ... } // Raw definition of a function returning a pointer to a function that returns an int // and takes two constant char pointers as arguments int (*ret_compare1(void *item))(const char *, const char *) { // Unused argument - item return compare; } // More usual typedef; a Comparator2 is a pointer to a function that returns an int // and takes two constant char pointers as arguments typedef int (*Comparator2)(const char *, const char *); // And ret_compare2 is a function returning a Comparator2 Comparator2 ret_compare2(void *item) { // Unused argument - item return compare; } // Less usual typedef; a Comparator3 is a function that returns an int // and takes two constant char pointers as arguments typedef int Comparator3(const char *, const char *); // And ret_compare3 is a function returning a pointer to a Comparator3 Comparator3 *ret_compare3(void *item) { // Unused argument - item return compare; } 

请注意,这些比较器不能与bsearch()qsort()使用(除非你使用相当可怕的强制转换),因为这些比较器应该采用const void *参数。

另请注意,为了比较字符串而不是单个字符, qsort()bsearch()使用的函数应类似于:

 int string_comparator(const void *v1, const void *v2) { const char *s1 = *(char **)v1; const char *s2 = *(char **)v2; return(strcmp(s1, s2)); }