2016-07-18 4 views
-3

Я хочу точно знать, каким должен быть третий параметр, потому что я никогда не видел ничего подобного.реализация моей книги вставки сортировки в C

void sortPointers(void **ar, int n, int (*cmp)(const void *, const void *)) 
{ 
    int j; 
    for (j = 1; j < n; j++) 
    { 
     int i = j - 1; 
     int *value = ar[j]; 
     while (i >= 0 && cmp(ar[i], value) > 0) 
     { 
      ar[i+1] = ar[i]; 
      i--; 
     } 
     ar[i+1] = value; 
    } 
} 
+1

Это указатель на функцию. Теперь вы должны знать, что делать. –

+1

Третий параметр - это функция сравнения (указатель на a), которая берет два элемента для сортировки и сравнивает их. Если элементы в порядке, дается отрицательное число (или 0 в случае равенства). Если элементы находятся в неправильном порядке, дайте положительный результат, и они будут заменены. То есть его вывод должен быть похож на 'strcmp'. –

+1

Оформить заказ ['qsort' documentation] (http://en.cppreference.com/w/c/algorithm/qsort). Он имеет 'cmp' в качестве аргумента, который служит той же цели. –

ответ

0

Этот аргумент является указателем на функцию, которая выполняет сравнение двух указателей void *. Этот способ реализации функции sortPointers (..) позволяет ее вызывающему пользователю использовать любую функцию сравнения, тем самым добавляя эту гибкость.

http://c.learncodethehardway.org/book/ex18.html

+0

"Сравнение двух указателей void *" - неправильно. Это для сравнения двух объектов любого общего типа, указанных этими указателями. –

+0

@ EugeneSh.Resmy правильный. Также верно, что эти указатели void могут указывать на разные типы. – 2501

 Смежные вопросы

  • Нет связанных вопросов^_^