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
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.
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden