遍历空白**

时间:2018-06-27 14:00:12

标签: c sorting pointers void

我想通过将大小计算到方法中而不是通过将其作为参数传递来对我的插入内容进行更新。我如何才能陷入空白**?还是有特定的方法来计算数组的维数?

void insertion_sort(int size, void** array, CompFunction compare){
    int i,j;
    void* key;
    for(i = 1; i<size;i++){
        key = array[i];
        for(j = i-1; j>=0 && compare(array[j],key)>=0;j--){
            swap(&array[j+1],&array[j]);
        }
        array[j+1] = key;
    }
}

1 个答案:

答案 0 :(得分:4)

  

我想通过将大小计算到方法中而不是通过将其作为参数传递来对我的插入内容进行更新。如何循环进入void**?还是有特定的方法来计算数组的维数?

您的函数未接收一个数组。它正在接收一个指向void *的指针。假设接收到的指针是有效的,则指向该对象的对象可以被视为数组的第一个元素(即使调用方将其声明为标量),但指针不能传达该数组的长度。您必须单独沟通。最常用的技术是:

  1. 如您演示的那样,将长度作为单独的参数传递,或者
  2. 按照标准库的字符串函数的要求,将数据结尾标记值作为数组中的最后一个值。

除非将长度以某种方式编码到所指向的数组元素本身中(例如通过哨兵),否则被调用的函数无法仅根据指针来确定数组大小。考虑一下,因为它完全独立于逻辑。