C, puntatore ad una funzione

di Anonimizzato14377 il
4 risposte
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

  • 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);
    }
  • 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!!
  • 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.
  • Ok, grazie!
Devi accedere o registrarti per scrivere nel forum
4 risposte