在 qsort() 中强制转换

casting in qsort()

本文关键字:转换 qsort      更新时间:2023-10-16

下面的程序使用库函数对字符串的所有内容进行排序qsort()

int sacomp(const void *a, const void *b) 
{
    return strcmp(*(const char**)a, *(const char**)b); <------------
}
void sort(string s) 
{
    int size = s.size();
    char const *data = s.c_str();
    char const **sa = new char const *[size+1];
    for(int i = 0; i < size; i++)
        sa[i] = data+i;
    qsort(sa, size, sizeof(sa[0]), sacomp); // O(n * Lon n)
}
int main() 
{
    string s("ABCCCDEFABBABBA");
    sort(s);
    return 0;
}

我无法理解sacomp()方法中的铸造。

strcmp(*(const char**)a, *(const char**)b); 

为什么 a 被强制转换为 const char** 然后被取消引用?

qsort 传递元素指针。你传递 sa 作为char**,所以每个元素都是char*的,qsort 传递char**,最后你在排序函数中得到了char**

你的元素是char *的,因此你应该在char *上更改void并得到指向char *的指针,这是char **。同时,strcmp 需要char * .