Ciao a tutti, ho una domanda probabilmente stupida ma che mi lascia un po' di confusione.
Ho letto che senza capirci molto per passare una funzione (f1) come parametro ad un'altra funzione (f2) bisogna definire una cosa del genere:
codice:
 
int f1(int a, int b);
int f2(int c, int(*f1)(int a, int b));
Però in un programma ho notato che funziona lo stesso se scrivo una cosa del genere:
codice:
#include <stdio.h>
#include <stdlib.h>

/* METODO DEI TRAPEZI */

double f(double z);
double fRT(double z, double IR, int n, double hj, double alpha);


int main()
{
  double z=0, alpha=1, hj=0.0001, IR=0;
  int n;
  
  n=(int)(alpha/hj);
  IR=fRT(z,IR,n,hj,alpha);
  printf("\n\n\tIR_T FINALE = %lf\n\n", IR);
  
}


double f(double z)
{
  return (z);
}

double fRT(double z, double IR, int n, double hj, double alpha)
{
  int u=0;
  double f0=f(z);
  double fn=f(alpha);
  IR=(hj/2.)*(f0+fn);
  printf("\n\t\tz\t   IR\n");
  for (u=1;u<n;u++)
  {    
    z=z+hj;
    printf("\t%lf\t%1.20lf\n", z,IR);
    IR=IR+hj*f(z);
  }    
  return (IR);
}
Passando direttamente f(z) ad fRT senza preoccuparmi della definizione precedente...
Sono confusa, è una cosa che si può fare come ho fatto io? Funziona sempre? Qualcuno può darmi delucidazioni?
E chiedo scusa in anticipo se la domanda è idiota..