我正在学习指针,我复制了一个快速实施。 当我编译时,gcc显示错误:
条件表达式中的指针类型不匹配
调用错误的行是:
qSort((void**)lineptr, 0, nlines-1, (int(*)(void*, void*))(numeric ? numcmp : strcmp));
该代码中的类型与初始化类型相同:
void qSort(void *lineptr[], int left, int right, int (*comp)(void *, void *));
以下是numcmp
实施:
int numcmp(char *s1, char *s2)
{
double v1, v2; v1 = atof(s1);
v2 = atof(s2);
if (v1 < v2)
return -1;
else if (v1 > v2)
return 1;
else
return 0;
}
答案 0 :(得分:1)
有问题的条件表达式是:
numeric ? numcmp : strcmp
编译器抱怨子表达式numcmp
的类型与子表达式strcmp
的类型不同。前者的类型为int (*)(char *, char *)
,后者的类型为int (*)(const char *, const char *)
(前提是您已记住#include <string.h>
,您必须这样做)。这些不一样,甚至不兼容(在标准的术语意义上&#34;兼容&#34;)。
您可以通过向函数const
的参数添加numcmp()
限定符来解决错误。但是,海湾合作委员会仍然会抱怨你对表达的价值所做的演员表。