2016-07-18 8 views
-3

Ich möchte genau wissen, was der dritte Parameter sein soll, weil ich noch nie so etwas gesehen habe.mein Buch Implementierung von Insertion Sortierung in C

void sortPointers(void **ar, int n, int (*cmp)(const void *, const void *)) 
{ 
    int j; 
    for (j = 1; j < n; j++) 
    { 
     int i = j - 1; 
     int *value = ar[j]; 
     while (i >= 0 && cmp(ar[i], value) > 0) 
     { 
      ar[i+1] = ar[i]; 
      i--; 
     } 
     ar[i+1] = value; 
    } 
} 
+1

Es ist ein Funktionszeiger. Jetzt sollten Sie wissen, was Sie recherchieren müssen. –

+1

Der dritte Parameter ist eine (Zeiger auf eine) Vergleichsfunktion, die zwei Elemente zum Sortieren benötigt und sie vergleicht. Wenn die Elemente in Ordnung sind, wird eine negative Zahl (oder 0 im Falle der Gleichheit) gegeben. Wenn die Elemente in der falschen Reihenfolge sind, geben Sie ein positives Ergebnis und sie werden getauscht. Das heißt, seine Ausgabe sollte ähnlich wie "strcmp" sein. –

+1

Checkout ['qsort' Dokumentation] (http://en.cppreference.com/w/c/algorithm/qsort). Es hat "cmp" als ein Argument, das dem gleichen Zweck dient. –

Antwort

0

Dieses Argument ist der Zeiger auf eine Funktion, die einen Vergleich von zwei void * -Zeigern durchführt. Diese Art der Implementierung der Funktion sortPointers (..) ermöglicht es dem Aufrufer, jede Vergleichsfunktion zu verwenden, wodurch diese Flexibilität hinzugefügt wird.

http://c.learncodethehardway.org/book/ex18.html

+0

"Vergleich von zwei void * pointers" - falsch. Es dient zum Vergleich zweier Objekte eines generischen Typs, auf die diese Zeiger zeigen. –

+0

@ EugeneSh.Resmy ist korrekt. Es ist auch richtig, dass diese ungültigen Zeiger auf verschiedene Typen zeigen. – 2501