Originariamente inviato da quagmire
perche la qsort vuole un puntatore a funzione come 4° parametro?
Perche' la qsort non sa quale tipo di dato deve trattare (stringhe, interi, tipi strutturati ...) e quindi non sa come confrontarli. Allora la funzione per poter confrontare i dati devi fornirla tu dall'esterno indicandola alla qsort.

perche devo definire il puntatore a funzione con const void* come argomenti invece che con il tipo "TIPO" definito da me?
Perche' il prototipo della qsort si aspetta dei parametri void * proprio perche' gli argomenti sono di tipo generico.

perche devo fare il cast con (cmp) per la compare quando chiamo la qsort?
Proprio perche' la funzione che usi ha dei parametri tipizzati e non void * come se li aspetta la qsort