2014-10-29 2 views
0

У меня есть задание от профессора, которого я не совсем понимаю. Это наш назначенный заголовок функции:Передача функции * cmp (const * void, const * void) в качестве параметра в C и ее использование для создания очереди?

PQueue createQueue(int (*cmp)(const void*a, const void*b)) { 

Я не могу найти документацию для cmp, чтобы понять, что делает сама функция; Что это делает?

И что дальше, как я могу обратиться к нему в createQueue, когда я пишу код для создания очереди?

+0

Вы обратитесь к параметру функции его * имя *, а именно 'cmp'. –

+0

Например, например, сравнивая приоритет, когда он добавляется в очередь. – BLUEPIXY

+0

Но что делает эта функция, когда она упоминается в функции создания очереди? –

ответ

2

cmp является параметром createQueue, это указатель на функцию, переданный вызывающим абонентом. Обычно cmp он будет возвращать:

  • отрицательное целое число, если *a меньше *b
  • 0, если *a равно *b
  • положительное целое число, если *a больше *b

В этом является стандартом, используемым стандартной библиотекой qsort, которая сортирует массив при задании некоторой функции сравнения.

В качестве конкретного примера, мы можем получить информацию о поведении

int a = 1, b = 2, c = 2; 
cmp(&a, &b); // returns < 0 
cmp(&b, &c); // returns 0 
cmp(&b, &a); // returns > 0 

если мы определим, как CMP

int cmp(const void * a, const void * b) { 
    const int * a_int_ptr = (const int *)a; 
    const int * b_int_ptr = (const int *)b; 

    int a_value = *a; 
    int b_value = *b; 

    return a_value - b_value; 
} 
Смежные вопросы