【发布时间】:2009-04-16 15:01:27
【问题描述】:
有以下声明:
void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *));
int numcmp(char *, char *);
int strcmp(char *s, char *t);
然后,在程序的某处有如下调用:
qsort((void**) lineptr, 0, nlines-1,
(int (*)(void*,void*))(numeric ? numcmp : strcmp));
(忽略前三个参数和numeric)。
我问这是什么:
(int (*)(void*,void*))(numeric ? numcmp : strcmp)
我知道qsort 期待一个“指向函数的指针,该函数获取两个void 指针并返回一个int”,因为它是第四个参数,但上面写的内容如何满足这一点?
在我看来,这像是某种演员表,因为它由两个括号组成,但那将是一个非常奇怪的演员表。因为它需要一个函数并使该函数成为“指向函数的指针,该函数获取两个void 指针并返回一个int”。这是没有意义的。
(我在这里遵循了一个规则,即在变量之前括号中的类型 type 将变量提升为该类型)。
所以我想我弄错了,也许有人可以告诉我如何阅读,顺序是什么?
【问题讨论】:
-
为什么没有意义?对我来说看起来还不错。
-
因为你拿了一个函数,让它没用。它变成了一个指针。它不再是一个功能。此外,传递给 qsort 的是什么?只是一个应该指向函数的指针,但没有人告诉它指向什么函数。我也认为将 func' 转换为指针正在缩小
-
指向函数的指针是函数指针...完全可以作为函数使用,谢谢...
标签: c pointers casting function-pointers