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 ?

questionAnswers(1)

yourAnswerToTheQuestion