Ponteiro para uso com o qsort
Esta mão de trecho de código copiada de um livro que estou lendo:
<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>
Essa função é usada com o qsort para classificar uma matriz de seqüências de caracteres. O ponto que eu não entendo é, porquev1 = *(char **) p1;
em vez de apenasv1 = (char *) p1;
ou nem mesmo esse trabalho;v1 = p1;
? Eu acho que o compilador deve automaticamente typecast esse assigment. Ou até mesmo, considere isto:
<code>/* scmp: string compare of *p1 and *p2 */ int scmp(const void *p1, const void *p2) { return strcmp(p1, p2); } </code>
Eu acho que (eu posso estar muito errado) o compilador é suposto a typecastp1
ep2
para dentrochar *
desde que é o questrcmp(char *, char *)
espera.
Resumindo, a questão é por quev1 = *(char **) p1
?