【发布时间】: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