Кроме того, стратегия слишком сложна для выполнения простого вычитания, в вашем коде есть некоторые ошибки:
#include <stdio.h> // a
typedef struct {
int id;
int hw_score[3];
int final;
} Student;
int intComparator(void* p, void* q) {
return (*(int*)p - *(int*)q); // b
}
int idComparator(void *student1, void *student2){
int result;
Student* s1, *s2; // c
s1 = (Student*)student1;
s2 = (Student*)student2;
result = intComparator(&(s1->id), &(s2->id)); // d
if (result > 0) {return 1;}
else if (result < 0) {return -1;}
else {return 0;}
}
int main()
{
int result;
Student s1, s2;
s1.id = 8;
s2.id = 10;
result = idComparator(&s1, &s2);
printf("result: %d\n", result);
return 0;
}
a) printf нуждается в stdio.h
b) * voidтребуется разыменование типа: Разыменование пустого указателя
c) s2 не был указателем: Объявление указателей;звездочка слева или справа от пробела между типом и именем?
d) Вам не нужно приводить к типу void, однако функция ожидает адрес: Почему тип приводит к типу voidуказатель?
Это демоверсия live , но, опять же, подумайте об улучшении дизайна, сделав его понятнее и проще.