【问题标题】:Qsort not working the way I expect it to with void pointersQsort 没有按照我期望的方式使用 void 指针
【发布时间】:2013-11-19 01:46:24
【问题描述】:

所以我正在尝试使用 qsort 对 C 中的 void 指针的通用数组列表进行排序。

当我实际使用数组列表时,我存储了Queue 指针。

我很确定我正确地调用了qsort

qsort(al->list, al->size, sizeof(void *), al->cf );

在我的比较器函数中,我想这样做

int compareQCtgry(const void * queueA, const void * queueB)
{
    Queue * q1 = (Queue *) queueA;
    Queue * q2 = (Queue *) queueB;
    return strcmp(q1->category, q2->category);
}

但是,我遇到了段错误。

但是当我把它改成

int compareQCtgry(const void * queueA, const void * queueB)
{
    Queue * q1 = *(Queue **) queueA;
    Queue * q2 = *(Queue **) queueB;
    return strcmp(q1->category, q2->category);
}

它有效,但对我来说毫无意义。为什么要将 void 指针转换为 Queue **,然后在看起来应该只能使用 Queue * 进行转换时取消引用它?

【问题讨论】:

    标签: c pointers void-pointers


    【解决方案1】:

    qsort 在排序时将指向列表元素的指针传递给比较例程。由于您的列表已经是指向Queue 的指针列表,因此指向这些指针的指针是指向Queue 的指针。

    【讨论】:

    • 谢谢,现在说得通了。
    猜你喜欢
    • 2022-12-13
    • 1970-01-01
    • 2012-10-05
    • 2022-08-17
    • 2011-06-18
    • 2012-01-13
    • 2020-11-22
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多