Jak*_*way 2 c pointers void-pointers
所以我尝试使用 qsort 对 C 中的 void 指针的通用数组列表进行排序。
当我实际使用数组列表时,我正在存储Queue指针。
我很确定我打电话是qsort正确的
qsort(al->list, al->size, sizeof(void *), al->cf );
Run Code Online (Sandbox Code Playgroud)
在我的比较器函数中,我想这样做
int compareQCtgry(const void * queueA, const void * queueB)
{
Queue * q1 = (Queue *) queueA;
Queue * q2 = (Queue *) queueB;
return strcmp(q1->category, q2->category);
}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了段错误。
但是当我将其更改为
int compareQCtgry(const void * queueA, const void * queueB)
{
Queue * q1 = *(Queue **) queueA;
Queue * q2 = *(Queue **) queueB;
return strcmp(q1->category, q2->category);
}
Run Code Online (Sandbox Code Playgroud)
它有效,但对我来说毫无意义。为什么将 void 指针强制转换为 a Queue **,然后取消引用它,而您似乎应该只能使用 a 来强制转换它Queue *?