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
?