[C] Cosa fanno queste funzioni?

di Anonimizzato19890 il
5 risposte
Salve ragazzi! Mi sto scervellando da una settimana, qualcuno può aiutarmi spiegandomi queste funzioni?
#include <stdio.h>

int a (int(*g) (int)) {
	int n = 5;
	while ((*g)(n)) n--;
	return n;
}

int b (int i) {
	return i*i-9;
}

int main (void) {
	printf("%d\n", a(b));
	return 0;
}
In particolare:
1) cosa vuol dire l'espressione di controllo del while nella funzione a?
2) Cosa stampa la printf del main? a(b) cosa vuol dire?

Grazie a tutti!

5 Risposte

  • 1) viene richiamata la funzione puntata da g, ovvero b() nel caso di esempio mostrato nel main()
    2) a(b) significa richiamare la funzione a() passandole il puntatore alla funzione b()
  • Se hai studiato (e capito) i puntatori a funzione, non dovrebbe essere difficile quel codice ...
  • candaluar ha scritto:


    1) viene richiamata la funzione puntata da g, ovvero b() nel caso di esempio mostrato nel main()
    2) a(b) significa richiamare la funzione a() passandole il puntatore alla funzione b()
    Innanzitutto grazie per l'aiuto!

    Quindi al punto 1) viene definito "Fintanto che g che punta ad n sia vera, decrementa n di 1"?
    E dal momento che la funzione b viene -chiamata senza argomenti (visto che nell'esempio del main c'è "a(b)"), che "i" prende la funzione b?
  • I diventa n, n-1,n-2 ...
  • E dal momento che la funzione b viene -chiamata senza argomenti (visto che nell'esempio del main c'è "a(b)")
    Attenzione, per farti capire, nel main() non richiami la funzione b; nel main() richiami la funzione a() passandole il puntatore alla funzione b().
    Così quando a() viene eseguita si ritrova in g il puntatore a b(): quando richiami (*g)(n) in pratica viene richiamata la funzione puntata da g (nella fattispecie b()) passandole il parametro n.
    Spero che questo ti abbia chiarito.
Devi accedere o registrarti per scrivere nel forum
5 risposte