Инициализация аргумента 4 функции void qsort() в C с использованием структур

У меня есть небольшая проблема с ошибкой при использовании функции qsort, она показывает мне:

[Примечание] инициализация аргумента 4 'void qsort(void*, size_t, size_t, int (*)(const void*, const void*))'

он также показывает ошибку:

[Ошибка] неверное преобразование из 'int (*)(const student*, const student*)' в 'int (*)(const void*, const void*)' [-fpermissive]

int n;
            qsort ((void*) databaza, size, sizeof(struct student), compare);
            for (n=0; n<size; n++)
            {  
            printf ("%d %s",databaza[SIZE].votes,databaza[SIZE].name);  
            }
            return 0;

где функция сравнения выглядит так

int compare(const struct student* p1, const struct student* p2){
           return ( p1->votes - p2->votes );
}

в структуре

struct student {
    char name[SIZE];
    int votes;
};


int find_student(struct student* students,int size, const char* name){
   for(int i = 0;i < size;i++){
    int results=strcmp(students[i].name,name);
      if(results==0){
          return i;
      }
   }
   return -1;
}

Может ли кто-нибудь сказать мне, почему это происходит, я новичок в структурах и функциях, таких как qsort.


person Chris    schedule 06.04.2020    source источник
comment
почему это происходит, --› сигнатура функции сравнения должна быть const void*, const void*, а не const struct student* p1, const struct student* p2.   -  person chux - Reinstate Monica    schedule 06.04.2020
comment
const void не является указателем на тип объекта   -  person Chris    schedule 06.04.2020
comment
@Chris: const void * - это указатель на тип объекта, и у вас нет выбора относительно типа аргумента qsort. Должно быть int (*)(const void *, const void *).   -  person Eric Postpischil    schedule 06.04.2020