2016-07-18 18 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

第三个参数是一个(指向一个)比较函数的指针,它将两个元素进行排序并对它们进行比较。如果元素是有序的,则给出负数(或者在相等的情况下为0)。如果元素顺序错误,请给出肯定的结果,然后交换。也就是说,它的输出应该与'strcmp'类似。 –

+1

签出['qsort'文档](http://en.cppreference.com/w/c/algorithm/qsort)。它具有“cmp”作为一个参数,可以达到同样的目的。 –

回答

0

该参数是指向两个void *指针进行比较的函数的指针。 sortPointers(..)函数的这种实现方式使调用者可以使用任何比较函数,从而增加了灵活性。

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

+0

“比较两个void *指针” - 错误。它用于比较由这些指针指向的任何泛型类型的两个对象。 –

+0

@ EugeneSh.Resmy是正确的。这些空指针可能指向不同的类型也是正确的。 – 2501