将void用于其他数据类型。

时间:2016-04-25 14:39:32

标签: c

所以我得到了这段代码:

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时它似乎会出现问题 我应该添加/更改什么?

1 个答案:

答案 0 :(得分:2)

这不能在C中完成.C没有运行时类型信息(RTTI)。

您要问的是将c1指向的某些字节数与c2指向的某些字节数进行比较。我们甚至不知道有多少字节,更不用说它们应该代表什么类型。因此,没有办法编写一个单一的“通用”函数,它可以神奇地决定应用哪些可能无限数量的比较算法。

附录:如果可以这样做,qsort将被设计为具有内置的功能,您不必编写自己的比较功能。事实上,qsort的设计师对这一责任进行了抨击,并将比较函数写回给用户的问题,这几乎证明了它无法完成。

生活中一个不幸的事实是,每当你打电话给qsort时,你必须自己编写自己的自定义比较函数;你不能写一个通用的,一次,并完成它。