在qsort中投射()

时间:2012-08-19 11:25:37

标签: c++ pointers

以下程序使用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 **然后被取消引用?

2 个答案:

答案 0 :(得分:1)

qsort传递元素的指针。您将sa作为char**传递,因此每个元素都为char*,qsort传递char**,最后您在sort函数中得到char**

答案 1 :(得分:0)

您的元素为char *,因此您应更改char *上的空格并获取char *的指针,即char **。同时strcmp需要char *