【问题标题】:Pointer to void*, And generic BUBBLE SORT指向 void* 和通用 BUBBLE SORT 的指针
【发布时间】:2013-06-28 15:17:37
【问题描述】:

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

无效**,

为什么没有

无效*

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

【问题讨论】:

标签: c sorting generics void-pointers


【解决方案1】:

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

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

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

【讨论】:

  • 所以如果我传递一个整数数组,那么该函数会将数组转换为 void** 并且每个元素都将转换为 void*?
  • 是的,所以不要这样做,因为你不能假设sizeof (int) == sizeof (void *)。它旨在对 void 指针数组进行排序。
猜你喜欢
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2014-05-30
  • 2012-03-15
  • 2010-09-29
  • 2014-10-01
相关资源
最近更新 更多