我在讲座文件中找到了这段代码。 这是一个通用函数,它获取比较函数和数组,并使用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讲座的作者故意这样做,但我无法理解。
答案 0 :(得分:0)
它不是通用排序,它是void *
数组的排序器。
因此,array
是void **
,意思是“指向void *
的指针”。您可以取消引用一次,array[0]
是要排序的第一个void *
。当然,你不能取消引用 ,因为void *
不支持。
顺便说一下,标准库的qsort()
是一个更好的泛型排序示例。