Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15

    [C] Passare una funzione ad un'altra funzione

    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..

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Nel primo caso potresti invocare f2 cosi:

    codice:
    int x = 1;
    f2(x, f1);
    Un conto è passare una funzione ad un'altra come parametro (primo codice). Altra è passare il valore di ritorno (secondo codice). Il passare una funzione (B) come parametro ad un'altra funzione (A) ha senso se A conosce solo durante l'esecuzione quale B necessita.

    Ad esempio, A potrebbe dover gestire diversi tipi di dato ed a seconda della loro tipologia necessita, al suo interno, l'invocare una funzione specifica per ciascuno di essi (a quel punto gli passi il tipo di dato e la funzione per gestirli).

    Funzioni di questo tipo hanno generalmente tutta la signature (o quasi) definita tramite puntatori a void, proprio per indicare la capacità di gestire diverse situazioni.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    In questa discussione http://forum.html.it/forum/showthrea...readid=1509878 in fondo trovi un esempio reale anche se molto semplice.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    15

    Grazie

    Credo di aver capito, sei stato/a davvero gentile e di grande aiuto!!
    Grazie, buona giornata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.