2013-07-01 1 views
0

Этот код нашел в моих лекционных файлах. Это общая функция, которая получает функцию сравнения и массив и сортировать его с пузырем СНПУказатель на void *, и общий 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 Тип (не интересно). мой вопрос, почему-то() получить

недействительным **,

Почему не

аннулируются *

. P.S Писательница лекции сделала это нарочно, но я не могу понять это.

+0

Проверьте эту ссылку: [Несколько обобщенная реализация] (http://en.literateprograms.org/Bubble_sort_%28C%29) –

ответ

0

Это не общий тип, он сортировщик для массивов void *.

Таким образом, array является void **, что означает "Указатель на указатель void *". Вы можете разыменовать его один раз, array[0] - это первый void * для сортировки. Конечно, вы не можете разыскивать , что хотя, так как void * не поддерживает это.

Кстати, стандартная библиотека qsort() является лучшим примером родового сортировки.

+0

Итак, если я передаю массив из целых чисел, тогда функция будет отличать массив от void * *, и каждый элемент будет лишен void *? –

+0

Да, так не делайте этого, так как вы не можете предположить, что 'sizeof (int) == sizeof (void *)'. Он предназначен для сортировки массивов указателей «void». – unwind

+0

http://postimg.org/image/sttaubgiz/ ???? –