Obsada wskaźnika do użycia z qsortem
Ten fragment kodu skopiowany z książki, którą czytam:
<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>
Ta funkcja jest używana z qsortem do sortowania tablicy ciągów. Nie rozumiem, dlaczegov1 = *(char **) p1;
zamiast po prostuv1 = (char *) p1;
lub nawet nie zadziałałaby;v1 = p1;
? Chyba kompilator powinien automatycznie wpisywać to przypisanie. Albo nawet rozważ to:
<code>/* scmp: string compare of *p1 and *p2 */ int scmp(const void *p1, const void *p2) { return strcmp(p1, p2); } </code>
Myślę, że kompilator powinien pisać na maszyniep1
ip2
wchar *
odkąd to jeststrcmp(char *, char *)
oczekuje.
Podsumowując, pytanie brzmi: dlaczegov1 = *(char **) p1
?