Menu
Coddy logo textTech

Chiamare i puntatori a funzione

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

Ora che sai come dichiarare un puntatore a funzione e assegnargli una funzione, il passo successivo è chiamare effettivamente la funzione tramite quel puntatore.

La sintassi è semplice. Usi il puntatore a funzione proprio come chiameresti una funzione normale:

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*operation)(int, int) = add;
    
    int result = operation(5, 3);  // Chiama add(5, 3)
    printf("%d\n", result);        // Output: 8
    return 0;
}

Scrivi semplicemente il nome del puntatore seguito da parentesi contenenti gli argomenti. C dereferenzia automaticamente il puntatore ed esegue la funzione a cui punta.

Puoi anche usare la sintassi di dereferenziazione esplicita con (*operation)(5, 3), ma è facoltativa e meno comune. Entrambe le forme producono risultati identici.

La vera potenza emerge quando riassegni il puntatore a funzioni diverse:

int subtract(int a, int b) {
    return a - b;
}

operation = subtract;
result = operation(5, 3);  // Ora chiama subtract(5, 3)
printf("%d\n", result);    // Output: 2

La stessa variabile operation ora esegue una logica completamente diversa. Questa capacità di cambiare comportamento durante l’esecuzione è il fondamento del polimorfismo in C.

challenge icon

Sfida

Facile

Facciamo pratica con la chiamata di funzioni tramite puntatori e con lo scambio della funzione eseguita. Costruirai una semplice calcolatrice che può passare dall’addizione alla sottrazione durante l’esecuzione.

Scrivi un programma che:

  1. Definisce due funzioni:
    • add: accetta due parametri int e restituisce la loro somma
    • subtract: accetta due parametri int e restituisce il primo meno il secondo
  2. In main, dichiara un puntatore a funzione chiamato calc che può puntare a funzioni che accettano due parametri int e restituiscono un int
  3. Legge quattro input: due numeri interi e due codici operazione
  4. Per ciascun codice operazione:
    • Assegna a calc la funzione appropriata (1 per add, 2 per subtract)
    • Chiama la funzione tramite il puntatore, usando i due numeri
    • Stampa il risultato

Riceverai quattro input: il primo numero, il secondo numero, il primo codice operazione (1 o 2) e il secondo codice operazione (1 o 2).

L’output deve mostrare due risultati su righe separate: uno per ciascuna operazione eseguita usando gli stessi due numeri:

15
5

In questo esempio, con gli input 10, 5, 1, 2: la prima operazione (codice 1) somma 10 + 5 = 15, poi il puntatore viene riassegnato e la seconda operazione (codice 2) sottrae 10 - 5 = 5.

Questo dimostra come la stessa variabile puntatore possa eseguire logiche completamente diverse riassegnandola tra una chiamata e l’altra.

Provalo tu

#include <stdio.h>

// TODO: Definisci qui la funzione add


// TODO: Definisci qui la funzione subtract


int main() {
    // Leggi gli input
    int num1, num2, op1, op2;
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &op1);
    scanf("%d", &op2);
    
    // TODO: Dichiara un puntatore a funzione chiamato 'calc' che possa puntare a
    // funzioni che accettano due parametri int e restituiscono un int
    
    
    // TODO: Per il primo codice operazione (op1):
    // - Assegna a calc la funzione appropriata (1 per add, 2 per subtract)
    // - Chiama la funzione tramite il puntatore e stampa il risultato
    
    
    // TODO: Per il secondo codice operazione (op2):
    // - Riassegna a calc la funzione appropriata
    // - Chiama la funzione tramite il puntatore e stampa il risultato
    
    
    return 0;
}
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