指向void *和通用BUBBLE SORT的指针

时间:2013-07-01 13:23:41

标签: c sorting generics void-pointers

我在讲座文件中找到了这段代码。 这是一个通用函数,它获取比较函数和数组,并使用BUBBLE SORT

对其进行排序
typedef Relation (*CmpFunction)(void*, void*);
void sort(void **array, int n, CmpFunction compare){ 
   int i, j;
   void*  tmp;
   assert(array !=NULL && compare != NULL);
   for(i=0; i<n; i++) {
      for(j=i+1; j<n; j++) {
         if(compare(arr[i], arr[j])==Left) {
            tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
          }
       }
    }
}

关系是:ENUM类型(不感兴趣)。 我的问题是,为什么sort()得到

  

无效**,

为什么不是

  

无效*

。 P.S讲座的作者故意这样做,但我无法理解。

1 个答案:

答案 0 :(得分:0)

它不是通用排序,它是void *数组的排序器。

因此,arrayvoid **,意思是“指向void *的指针”。您可以取消引用一次,array[0]是要排序的第一个void *。当然,你不能取消引用 ,因为void *不支持。

顺便说一下,标准库的qsort()是一个更好的泛型排序示例。