我是C++程序员,但大部分时间只是为了好玩,我试图在C中进行一些通用编程。特别是,我实现了一个通用的排序算法。我的函数的签名是为什么qsort()没有返回值?
int sort(void *data,
size_t num_elems,
size_t elem_size,
int (*cmp)(const void*, const void*))
当我在标准库相比,这qsort()
,我发现我的不同功能,qsort()
没有返回值。由于对数组进行排序总是需要交换元素,因此实现需要临时存储大小为elem_size
。由于C没有模板,elem_size
在编译时并不知道,所以临时存储必须动态分配,这可能会失败。在这种情况下,qsort()
无法对数组进行排序,但也无法报告错误,因此无法知道数组是否在返回时排序。
我失去了一些东西在这里?
请您详细说明一下吗?如何更改元素的顺序而无需额外存储至少一个元素? – cthl
忽略这一点,我很愚蠢,并认为你写了'num_elems'而不是'elem_size'。尽管如此,仍然可以在没有可变数量的临时存储的情况下交换任意数量的内存。只需要以固定大小的单位进行(例如,一次一个字节)。 – Ryan