定义返回函数指针的函数的各种样式是什么?
我有一个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)); }