Menu
Coddy logo textTech

Confronto generico

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 52 di 61.

Le funzioni generiche come qsort e bsearch nella libreria standard di C hanno bisogno di un modo per confrontare gli elementi senza conoscerne i tipi. La soluzione è una funzione di confronto: una funzione che scrivi e che l’algoritmo generico chiama ogni volta che deve confrontare due elementi.

La firma standard per le funzioni di confronto è:

int compare(const void* a, const void* b);

Entrambi i parametri sono const void* perché la funzione generica non sa quale tipo stai ordinando. Il valore restituito segue una convenzione specifica:

Valore restituitoSignificato
Negativoa viene prima di b
Zeroa è uguale a b
Positivoa viene dopo b

All’interno della tua funzione di confronto, converti i puntatori void* nel tipo effettivo e confronti i valori. Ecco come confrontare gli interi:

int compare_ints(const void* a, const void* b) {
    int val_a = *(const int*)a;
    int val_b = *(const int*)b;
    return val_a - val_b;
}

Il trucco della sottrazione funziona bene per gli interi: se a è minore, il risultato è negativo; se è uguale, zero; se è maggiore, positivo. Ora questa funzione può essere passata a qsort per ordinare un array di interi in ordine crescente.

challenge icon

Sfida

Facile
Scrivi una funzione compare_ints che confronti due numeri interi seguendo la convenzione standard delle funzioni di confronto utilizzata dagli algoritmi generici come qsort.

La tua funzione deve confrontare i due valori e restituire un risultato che ne indichi l’ordine relativo.

Convenzione del valore restituito:

  • Restituisci un valore negativo se il primo intero precede il secondo (first < second)
  • Restituisci zero se i due interi sono uguali
  • Restituisci un valore positivo se il primo intero segue il secondo (first > second)

Parametri:

  • a (int): il primo intero da confrontare
  • b (int): il secondo intero da confrontare

Valore restituito: un intero che indica l’ordine: negativo se a < b, zero se a == b, positivo se a > b.

Suggerimento: il trucco della sottrazione presentato nella lezione offre un’elegante soluzione in una sola riga.

Provalo tu

int compare_ints(int a, int b) {
    // Scrivi il codice qui
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online