有以下声明:
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
变量前括号中的类型将变量提升为该类型)。
所以我想我弄错了,也许有人可以告诉我如何阅读这个,顺序是什么?