C, puntatore ad una funzione

di il
4 risposte

C, puntatore ad una funzione

Ciao!
#include <stdio.h>

int somma(int a, int b);

int main()
{
	int (*f)(int x, int y);
	f = somma;
	printf("Somma: %d\n", f);
	
	return 0;
}

int somma(int a, int b)
{
	a = 5;
	b = 10;
	return (a + b);
}
Sto cercando di creare un puntatore ad una funzione, in modo tale che f risulti essere 15 quando lo si va a stampare.

L'errore che mi da il compilatore è:
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int (*)(int, int)’ [-Wformat=]
printf("Somma: %d\n", *f);
^


Come devo fare? Grazie

4 Risposte

  • Re: C, puntatore ad una funzione

    Prima ti tutto la funzione accetta due parametri che tu non passi (anzi, stranamente li imposti al suo interno). E poi f è un puntatore, se lo utilizzi lo devi dereferenziare. Quindi
    
    int main()
    {
       int (*f)(int x, int y);
       
       f = somma;
       printf("Somma: %d\n", (*f)(5, 10));
       
       return 0;
    }
    
    int somma(int a, int b)
    {
       return (a + b);
    }
  • Re: C, puntatore ad una funzione

    Ho fatto una confusione pazzesca!

    Mi è venuto un dubbio, vorrei un altro chiarimento: "f = somma", se lo tolgo il compilatore dice: Errore di segmentazione (core dump creato). A che serve?

    Non basterebbe printf("Somma: %d\n", (*f)(5, 10)); ?

    Ti ringrazio!!
  • Re: C, puntatore ad una funzione

    Tu non hai ben chiaro cosa sia un puntatore ...

    E' come un indirizzo di una casa ... se però l'indirizzo non "punta" ad una vera casa allora non ha senso ... e hai un crash.

    In questo caso l'indirizo è f e la casa è la funzione somma.

    Se non associ ad f l'indirizzo di somma, l'utilizzo di f causerà un crash.
  • Re: C, puntatore ad una funzione

    Ok, grazie!
Devi accedere o registrarti per scrivere nel forum
4 risposte