C Puntatori a funzione e struct

di il
7 risposte

C Puntatori a funzione e struct

E' possibile in un puntatore a funzione mettere come parametro una struct?

7 Risposte

  • Re: C Puntatori a funzione e struct

    Se intendi un puntatore ad una struct come parametro di una funzione che richiami tramite un puntatore la risposta è sì; il puntatore a funzione punta ad un qualsiasi tipo di funzione!

    Aggiungo un esempio (spero di non commettere errori di sintassi...):
    typedef int (*tmiafunc)(struct miastruct *);
    
    ...
    int func(struct miastruct *par)
    {
         // ...
    }
    
    ...
    {
        tmiafunc pmiafunc;
        struct miastruct s;
        
        pmiafunc = func;
        pmiafunc(&s);
    
  • Re: C Puntatori a funzione e struct

    typedef int (*tmiafunc)(struct miastruct );
    
    ...
    int func(struct miastruct par)
    {
         // ...
    }
    
    ...
    {
        tmiafunc pmiafunc;
        struct miastruct s;
       
        pmiafunc = func;
        pmiafunc(s);
    Anche questo è possibile, che dovrebbe essere quello che chiedevi. @candaluar ti ha fornito un ulteriore esempio, dove il parametro della funzione è un puntatore.
  • Re: C Puntatori a funzione e struct

    @SVNiko aspettiamo quello che ci dice l'OP; ad ogni modo in C le strutture tipicamente si passano usando un puntatore...
  • Re: C Puntatori a funzione e struct

    candaluar ha scritto:


    ad ogni modo in C le strutture tipicamente si passano usando un puntatore...
    Tipicamente, ma come tutti i dati non è obbligatorio farlo. Se vuoi programmare una funzione che stampi il contenuto di una struttura, va benissimo passarla per valore e non per riferimento. Ad ogni modo, il mio non era un intervento polemico, ho solo voluto precisare che è possibile passare per valore come pare chieda.
  • Re: C Puntatori a funzione e struct

    Se vuoi programmare una funzione che stampi il contenuto di una struttura, va benissimo passarla per valore e non per riferimento.
    Appunto, in C anche quando vuoi passare una struttura "per valore" è comunque preferibile utilizzare un puntatore (pensa solo all'utilizzo dello stack se hai una struttura piuttosto "corposa").
    Ad ogni modo, il mio non era un intervento polemico,
    Tranquillo, avevo capito
  • Re: C Puntatori a funzione e struct

    Giusto per aggiungere una terza versione, è possibile dichiarare il parametro della funzione come void *, ed effettuare poi un cast all'interno della funzione.

    Questo metodo, che di per sé sembra assurdo, è in realtà obbligatorio quando si lavora, ad esempio, con la libreria pthread. Infatti funzioni come la pthread_create richiedono che tra i parametri gli si passi un puntatore a una funzione che ha un unico parametro di tipo void * e come tipo di ritorno sempre void *.
  • Re: C Puntatori a funzione e struct

    Grazie mille
Devi accedere o registrarti per scrivere nel forum
7 risposte