Zeigermodell zur Verwendung mit qsort

Dieser Codeausschnitt stammt aus einem Buch, das ich gerade lese:

<code>/* scmp: string compare of *p1 and *p2 */
int scmp(const void *p1, const void *p2)
{
        char *v1, *v2;
        v1 = *(char **) p1; 
        v2 = *(char **) p2; 

        return strcmp(v1, v2);
}
</code>

Diese Funktion wird mit qsort verwendet, um ein Array von Zeichenfolgen zu sortieren. Der Punkt, den ich nicht verstehe, ist, warumv1 = *(char **) p1; statt nurv1 = (char *) p1; oder würde nicht einmal diese Arbeit;v1 = p1;? Ich denke, der Compiler sollte diese Zuweisung automatisch typisieren. Oder überlegen Sie mal:

<code>/* scmp: string compare of *p1 and *p2 */
int scmp(const void *p1, const void *p2)
{
        return strcmp(p1, p2);
}
</code>

Ich denke, (ich könnte mich schrecklich irren) der Compiler soll typisierenp1 undp2 inchar * da ist es wasstrcmp(char *, char *) erwartet.

Zusammenfassend ist die Frage, warumv1 = *(char **) p1 ?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage