所以我得到了这段代码:
int compare(const void *c1, const void *c2)
{
assert(c1 && c2);
char a = *(const char*)c1;
char b = *(const char*)c2;
if (a > b) return 1;
if (a < b) return -1;
return 0;
}
它基本上做的是获取任何数据类型的两个指针c1和c2,并检查谁比另一个更大。我希望这适用于我收到的任何数据类型,但是当我发送double或float时它似乎会出现问题 我应该添加/更改什么?
答案 0 :(得分:2)
这不能在C中完成.C没有运行时类型信息(RTTI)。
您要问的是将c1
指向的某些字节数与c2
指向的某些字节数进行比较。我们甚至不知道有多少字节,更不用说它们应该代表什么类型。因此,没有办法编写一个单一的“通用”函数,它可以神奇地决定应用哪些可能无限数量的比较算法。
附录:如果可以这样做,qsort
将被设计为具有内置的功能,您不必编写自己的比较功能。事实上,qsort
的设计师对这一责任进行了抨击,并将比较函数写回给用户的问题,这几乎证明了它无法完成。
生活中一个不幸的事实是,每当你打电话给qsort
时,你必须自己编写自己的自定义比较函数;你不能写一个通用的,一次,并完成它。