Psycho~zicke Geschrieben 13. November 2008 Geschrieben 13. November 2008 Hallo, ich schreibe gerade ein Programm das Aus einer Datei eine Tabelle einliest. Danach soll die Tabelle in Richtiger reihenfolge sortiert werden. Das funktioniert auch alles bestens. Ich habe da eine Funktion die 2 Strings mit einander Vergleicht und genau da liegt mein Problem. int Vergleich(const void *s1, const void *s2) { return (strcmp(*(char **)s1, *(char **)s2)); } Mir wurde gesagt das das nur so funktioniert. Allerdings verstehe ich nicht wieso ich so viele Zeiger brauche. Vllt kann es mir ja jemand erklären. Wäre lieb. Liebe Grüße Zitieren
Klotzkopp Geschrieben 13. November 2008 Geschrieben 13. November 2008 Mir wurde gesagt das das nur so funktioniert. Allerdings verstehe ich nicht wieso ich so viele Zeiger brauche. Ist das eine Vergleichsfunktion für qsort? Wenn du ein Array mit qsort sortierst, wird die Vergleichsfunktion mit den Adressen jeweils zweier Arrayelemente aufgerufen. Wenn du also ein Array von char* hast, bekommt die Vergleichsfunkion char**. Da es in C keine andere Möglichkeit gibt, werden diese Adressen in dem "generischen" Typ void* übergeben. Hinter diesen void* stecken also eigentlich Zeiger auf Strings (char**). Die kannst du aber nicht mit strcmp vergleichen, deswegen musst du sie vorher einmal derefenzieren, und das macht der Stern ganz vorn. Zitieren
Psycho~zicke Geschrieben 13. November 2008 Autor Geschrieben 13. November 2008 Ja genau das ist eine vergleichsfunktion für qsort. ahh ok. Danke nun habe ich es verstanden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.