gpt4 book ai didi

C++ qsort 中的 size 参数有什么作用

转载 作者:行者123 更新时间:2023-12-04 05:03:27 24 4
gpt4 key购买 nike

在 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*) 作为类型声明。

有什么解释吗?

最佳答案

qsort需要一个可以被视为数组的连续内存块。因此,数组中的每一项都必须具有相同的大小,并且您将该大小提供给 qsort当你调用它时。

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

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

更常见的是将字符串本身存储在数组区域之外,并仅使用数组来存储指向这些字符串的指针。指针本身将被交换,但平均而言它们将比它们指向的字符串小得多。

例如,使用:

char *strings[] = {"xyzzy", "zorkmid", "twisty little passages", "plugh"};
strings数组由四个指向这些字符串的指针组成,每个指针占用四个字节(在我的系统上,你的可能不同)。当 qsort对数组进行排序,在该数组中移动的唯一东西是指针。

关于C++ qsort 中的 size 参数有什么作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15824907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com