(int(*)(void *,void *))(numeric?numcmp:strcmp));
numcmp和strcmp是带有两个参数的函数。
我理解条件运算符正在做什么。这很简单。
我可以推断这将评估为numcmp(void *,void *)或strcmp(void *,void *),但我不明白为什么?特别是: int(*),让我困惑。
答案 0 :(得分:3)
表达式(int ( * ) (void*, void*))
只是对函数指针的强制转换,其中两个void*
参数返回int
。对于其他强制类型转换,语法类似于没有变量名的变量声明。然后根据布尔开关,决定要转换哪个函数。