E' anche vero però che la funzione qsort() utilizza i puntatori a void per rendere *effettivamente* generico l'algoritmo di ordinamento, cioè tale da poter ordinare array di qualsiasi tipo (anche array di strutture definite dall'utente) semplicemente passando come parametro una funzione che "istruisca" la qsort() su come operare i confronti.Originariamente inviato da MItaly
Ha così poco senso che anche la funzione di libreria C per l'ordinamento (qsort) usa lo stesso approccio...![]()
Seriamente, nelle operazioni di ordinamento è fondamentale consentire al chiamante di specificare una funzione di confronto: l'algoritmo infatti è sempre lo stesso, indifferentemente dal criterio scelto per l'ordinamento, e in questa maniera anche se voglio ordinare il mio insieme per qualche criterio strano (ordine ascendente, discendente, distanza da un certo numero, ...) posso farlo.
Nell'esempio postato dal nostro amico questo viene a mancare perché la funzione parametro riceve in input due interi, e non genericamente due puntatori void. La cosa vuole semplicemente servire a far scegliere all'utente il tipo di ordinamento (crescente o decrescente) ma in effett in quel caso i puntatori a funzione non sono poi tanto utili... magari con un semplice parametro booleano si poteva risolvere la cosa: 0 -> ordinamento crescente; 1 -> ordinamento decrescente. Poi sarebbe bastato differenziare i casi all'interno della funzione stessa. Voleva essere forse solo un semplice esempio di utilizzo dei puntatori a funzione, sebbene in una situazione in cui potevano essere evitati.