0

我在我的讲座文件中找到了这段代码。这是一个通用函数,它获取比较函数和数组,并使用 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() 得到

空白**,

为什么不是

空白*

. PS讲座的作者是故意的,但我想不通。

4

1 回答 1

0

它不是通用排序,它是void *.

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

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

于 2013-07-01T13:26:41.617 回答