C ++ qsort中的size参数是做什么的

时间:2013-04-05 02:28:06

标签: c

在qsort中:

void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

文档说明:

size
Size in bytes of each element in the array.
size_t is an unsigned integral type.

但通常qsort被调用为qsort(...,...,sizeof(int),...)qsort(...,...,sizeof(char *),...)

如果我理解正确,因为无法确定字符串的大小,所以不再重要,而是使用sizeof(char *)作为类型声明。

有任何解释吗?

1 个答案:

答案 0 :(得分:3)

qsort需要一个可以视为数组的连续内存块。因此,阵列中的每个项目大小必须相同,并且在调用它时将该大小提供给qsort

如果要将实际的字符串存储在数组中,它们需要具有相同的大小,即最大的大小。

而且,当你的比较函数比较它们时,qsort几乎肯定会移动大量的内存来完成排序,因为它会自己交换字符串。

更常见的是让字符串本身存储在数组区域的外部,并使用该数组将指针存储到这些字符串中。指针本身将被交换,但它们的平均值将比它们指向的字符串小得多。

例如,使用:

char *strings[] = {"xyzzy", "zorkmid", "twisty little passages", "plugh"};

strings数组包含四个指向这些字符串的指针,每个指针占用四个字节(在我的系统上,你的可能不同)。当qsort对数组进行排序时,在该数组中移动的唯一内容是指针。