У меня есть структура, которая выглядит так
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;
? - person chux - Reinstate Monica   schedule 24.02.2017int
, вашей функции было бы передано дваint *
. Поскольку вы сортируете массивpair *
, вашей функции передаются дваpair **
. - person Jonathan Leffler   schedule 24.02.2017qsort()
, учитывайтеqsort(array, arr_len, sizeof *array, struct_cmp);
Это легче кодировать, просматривать и поддерживать, чемqsort(..., ..., sizeof(pair), ...)
- person chux - Reinstate Monica   schedule 24.02.2017