【发布时间】:2017-02-23 22:16:39
【问题描述】:
我有一个看起来像这样的结构
typedef struct id_score{
int id;
int score;
} pair;
一个大小为 50 的数组保存指向这些对的指针
pair* array[50]
我的比较器函数如下所示
int struct_cmp(const void *a, const void* b) {
pair* ia = (pair*)a;
pair* ib = (pair*)b;
printf("ia's score: %d ib's score: %d??? \n", ia->score, ib->score);
return ib->score - ia->score;
}
我的 qsort 函数在这里
size_t arr_len = sizeof(array) / sizeof(pair);
qsort(array, arr_len, sizeof(pair), struct_cmp);
现在我的问题是,在struct_cmp 函数中,我的printf 显示我认为应该是数组中每个结构中的计数的值都被解释为0,因此没有对数组进行排序全部。当我通过数组打印时,在函数之外,结构具有它应该具有的分数。
有什么建议吗??谢谢!
【问题讨论】:
-
是不是
a在指向元素的指针中?数组元素是pair*类型所以pair** ia = (pair**)a;? -
你正在对一个指针数组进行排序;您的比较器传递了一对指向指针的指针,而不是单级指针。如果您对
int的数组进行排序,您的函数将传递两个int *。由于您正在对pair *的数组进行排序,因此您的函数将传递两个pair **。 -
注意:当您调用
qsort()时,请考虑qsort(array, arr_len, sizeof *array, struct_cmp);这比qsort(..., ..., sizeof(pair), ...)更容易编码、审查和维护
标签: c arrays struct comparator qsort