gpt4 book ai didi

c - Qsort 无法按照我期望的方式使用 void 指针

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:43 27 4
gpt4 key购买 nike

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

当我实际使用数组列表时,我正在存储 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 * 转换它时取消引用它?

最佳答案

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

关于c - Qsort 无法按照我期望的方式使用 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061608/

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