Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [C]Array di puntatori a funzione

    Salve a tutti,vorrei sapere come fare per allocare memoria per un array di puntatori a funzione.
    In particolare non so qual'è la dimensione che deve avere una funzione.
    Il puntatore è destinato a contenere nomi di funzioni che restituiscono variabili di tipo float.
    Nella dichiarazione dovrei scrivere:
    codice:
    pointer[0] ()=(dim)malloc(dim);
    Ma non ho idea di cosa scriverci,qual'è la dimensione di una funzione?
    Ho provato a usare sizeof ma mi da errore di sintassi.

  2. #2
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Sinceramente non capisco il perché del tuo codice e nemmeno cosa intendiquando parli della "dimensione della funzione" ... Comunque un puntatore a funzione non puo essere utilizzato per creare una nuova funzione (come i puntatori con gli array), ma soltanto per memorizzare indirizzi di funzioni "preesistenti" e per richiamare una funzione attraverso lo stesso puntatore a funzione ...
    codice:
    float sum( float a, float b )
    {
    return a + b;
    }
    
    float diff( float a, float b )
    {
    return a - b;
    }
    
    int round( float a )
    {
    return (int)a;
    }
    ....
    float (*Func)(floar,float) = sum;
    Func(1.0f, 2.0f);
    Func = diff;
    Func(2.0f, 1.0f);
    Func = round;     //Errore
    ....
    Nota anche che la firma del puntatore deve essere identica a quella della funzione a cui deve puntare ...
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Io voglio dichiarare un array di puntatori a funzione,so come usarli.
    Dichiaro il puntatore a funzione così:
    codice:
    int (*pointer) ();
    Giusto per fare un esempio.
    Adesso vorrei un array di puntatori,sto provando ma mi da segmentation fault,provo così:
    codice:
    int (**pointer)();
    O così:
    codice:
    int *(*pointer) ();
    Ma niente da fare voglio un array di puntatori a funzione.

  4. #4
    devi dichiarare un tipo puntatore a funzione con typedef (che anche se non volessi fare un'array, è sempre consigliato in tutti i libri di C)

    codice:
    void funzione();
    
    typedef void (*punt_a_funzione)();
    
    punt_a_funzione arr_punt_a_funzione[10];
    
    punt_a_funzione* arr_dinamico_punt_a_funzione = (punt_a_funzione*) malloc(10 * sizeof(punt_a_funzione));
    
    .....
    
    {
        arr_punt_a_funzione[2] = funzione;
        arr_dinamico_punt_a_funzione[3] = funzione;
    
        arr_punt_a_funzione[2]();
        arr_dinamico_punt_a_funzione[3]();
    }

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Fantastico
    Dichiarando il tipo riesco ad allocare perfettamente.
    Grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.