Похоже, что это функция int compare( void *, void * )
, передаваемая в функцию qsort()
.
qsort()
- это стандартная функция C :
7.22.5.2 Функция qsort
Сводка
1
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
Описание
2 Функция qsort
сортирует массив объектов nmemb
, на начальный элемент которых указывает base
.Размер каждого объекта определяется размером.
3 Содержимое массива сортируется в порядке возрастания в соответствии с функцией сравнения, на которую указывает compar
, которая вызывается с двумя аргументами, указывающими на объектысравниватьФункция должна возвращать целое число меньше, равно или больше нуля, если первый аргумент считается соответственно меньше, равен или больше второго.
4 Если два элемента сравниваются как равныеих порядок в результирующем отсортированном массиве не указан.
Возвращает
5 Функция qsort не возвращает значения.
Учитывая ваш struct
:
struct student {
// Name of student
char name[BUFSIZE];
// number of votes
int votes;
};
Я бы предположил, что поле votes
определяет, какой struct
"больше", чем другой.
Обратите внимание, что я думаю, что «вернуть 0 в случае, если они одинаковы, положительное значение, если первая запись больше, чем вторая, отрицательное значение, если вторая запись больше первой», это ужасноуказанное заявление.В буквальном смысле, каждый передаваемый указатель struct
имеет точно такой же размер, как и каждый struct
, поэтому строгое соблюдение этого требования означает, что все ваши функции действительно должны возвращать 0
.(Если это классная работа, я очень хочу посоветовать вам включить это предупреждение, в котором вы собираетесь публиковать комментарии своего учителя по этому вопросу ...)
Но, если вы 'Повторное ранжирование в порядке голосов:
int compare( void *p1, void *p2 )
{
struct student *s1 = p1;
struct student *s2 = p2;
return( s1->votes - s2->votes );
}