[C] Cosa fanno queste funzioni?

di il
5 risposte

[C] Cosa fanno queste funzioni?

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

  • Re: [C] Cosa fanno queste funzioni?

    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()
  • Re: [C] Cosa fanno queste funzioni?

    Se hai studiato (e capito) i puntatori a funzione, non dovrebbe essere difficile quel codice ...
  • Re: [C] Cosa fanno queste funzioni?

    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?
  • Re: [C] Cosa fanno queste funzioni?

    I diventa n, n-1,n-2 ...
  • Re: [C] Cosa fanno queste funzioni?

    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